2017-05-30 97 views
0

我想從sftp目錄中讀取文件,然後將它們插入到Oracle表中。 因爲我們無法訪問服務器,所以我們無法從Oracle那裏獲得。 所以我想關於Java: 我發現下面的類:從SFTP獲取文件到Oracle

https://atechblogagain.wordpress.com/2013/06/04/simple-sftp-example-in-java-with-jsch/

import java.util.Vector; 
import com.jcraft.jsch.Channel; 
import com.jcraft.jsch.ChannelSftp; 
import com.jcraft.jsch.JSch; 
import com.jcraft.jsch.JSchException; 
import com.jcraft.jsch.Session; 
import com.jcraft.jsch.SftpException; 

public class DemoSftp { 

    public static void main(String[] args) throws JSchException, SftpException { 

     String hostname = "hostname"; 
     String login = "login"; 
     String password = "password"; 
     String directory = "the directory"; 

     java.util.Properties config = new java.util.Properties(); 
     config.put("StrictHostKeyChecking", "no"); 

     JSch ssh = new JSch(); 
     Session session = ssh.getSession(login, hostname, 22); 
     session.setConfig(config); 
     session.setPassword(password); 
     session.connect(); 
     Channel channel = session.openChannel("sftp"); 
     channel.connect(); 

     ChannelSftp sftp = (ChannelSftp) channel; 
     sftp.cd(directory); 
     Vector files = sftp.ls("*"); 
     System.out.printf("Found %d files in dir %s%n", files.size(), directory); 

     for (ChannelSftp.LsEntry file : files) { 
      if (file.getAttrs().isDir()) { 
       continue; 
      } 
      System.out.printf("Reading file : %s%n", file.getFilename()); 
      BufferedReader bis = new BufferedReader(new InputStreamReader(sftp.get(file.getFilename()))); 
      String line = null; 
      while ((line = bis.readLine()) != null) { 
       System.out.println(line); 
      } 
      bis.close(); 
     } 

     channel.disconnect(); 
     session.disconnect(); 

    } 

} 

這讓我的存取權限SFTP目錄,並將其打印System.out.printf(「找到%d文件在目錄dir%s%n「,files.size(),目錄中),但是它顯示了以下行的錯誤:for(ChannelSftp.LsEntry file:files):

」此行的多個標記 - 類型不匹配:無法從元素類型對象轉換爲 ChannelSftp.LsEntry - 行斷點:SFTPEX [行:45] - 主(字符串[])「

我必須改變以使其工作? 你能幫我一個關於如何將文件內容清理成Oracle數據庫中的列的例子嗎?每個文件都有自己的行,包含名稱,類型和內容。

+0

你有對象類的矢量'矢量files' –

+0

我看到了,我知道這是錯誤的,但我對於Java來說,這是一種新鮮的事情,我不知道如何處理你告訴我的事情。 – Iulian

回答

0

請嘗試以下

Vector<ChannelSftp.LsEntry> files = sftp.ls("*"); 

您現在有一個原始對象矢量

+0

它工作!它說閱讀部分的一些異常處理,但我解決了這個問題。你能幫我/給我一些關於如何在Oracle表中寫文件內容的提示嗎? – Iulian

+0

我已經掌握了所有工作,謝謝! – Iulian