2

这是我使用 JSch 从另一个位置读取文件的代码

import com.jcraft.jsch.*;
import java.io.BufferedReader;
import java.io.*;
import java.util.Vector;

public class SftpClient {
    public static void main(String args[]) {
        JSch jsch = new JSch();
        Session session = null;
        FileReader reader =null;
        BufferedReader buffer = null;
        try 
        {
.
            session = jsch.getSession("userName", "Ip Address");
            java.util.Properties config = new java.util.Properties(); 
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);  
            session.setPassword("password");                
            session.connect();              
            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;
            System.out.println("Is connected to IP:"+channel.isConnected());
            Vector ls=sftpChannel.ls("/misc/downloads/");
            for(int i=0;i<ls.size();i++){
               System.out.println("Ls:"+ls.get(i));
            }
            sftpChannel.cd("/misc/downloads/");             
            File file = new File("Text.txt");
            sftpChannel.put(new FileInputStream(file),"Text.txt");              
            reader = new FileReader(file);
            buffer = new BufferedReader(reader);                
            String getLine = "";
            while ((getLine = buffer.readLine())!=null)
            {
               System.out.println("Line: "+getLine);
            }
            sftpChannel.exit();             
            session.disconnect();
        }
        catch (JSchException e) {
            e.printStackTrace();
        }
        catch (Exception e){
            e.printStackTrace();
        } 
        finally{
            try{
               if(reader!=null)
                  reader.close();
               if(buffer!=null)
                  buffer.close();
            }
            catch(Exception e){
               System.out.println("Exception:"+e);
            }
        }
    }

}

代码的输出是:

Is connected to IP:true
Ls:-rw-r--r--    1 root     root          733 Jul 19 17:46 Text.txt
java.io.FileNotFoundException: Text.txt (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:103)
    at SftpClient.main(SftpClient.java:34)

我收到了 FileNotFoundException,但在此之前我使用 ls 制作了 SOP 以列出 /misc/downloads/ 路径中的所有文件。

我能做些什么来解决这个问题?

4

2 回答 2

3

FileInputStream尝试从您的本地文件系统(它不存在)读取文件,您似乎实际上想从远程文件系统读取它。还是要将其下载到本地系统然后从那里读取?

无论如何,要从远程下载,请使用其中一种get方法ChannelSftp,而不是put(用于上传)。

于 2011-07-19T21:34:30.503 回答
1

您可以考虑使用Apache VFS来读取远程文件。它是简单而强大的库。

于 2011-07-19T13:52:32.140 回答