java - 使用 JSch 从另一个位置读取文件

标签 java sftp jsch

这是我使用 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/路径中的所有文件。

我该如何解决这个问题?

最佳答案

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

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

关于java - 使用 JSch 从另一个位置读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6747993/

相关文章:

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 自动登录网站

android - 使用JSch从Android上的SFTP文件传输进行慢速传输

javascript - Node.js sftp 下载文件

sftp - 如何在使用 JSch 作为 SFTP 客户端时启用被动模式?

java - SSH 与 JSch 用于具有中间输出的多个命令

java - 断开连接前终止进程

java - 如何对无效函数进行单元测试?

java - HTTPS POST 请求(java)到网站(php),如何处理来自它的数据?

java - 使用来自 ChannelSftp.get 的输入流时 ChannelSftp.put 方法卡住