这是我使用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列出了/ misc / downloads / path中的所有文件。
我该怎么做才能解决这个问题?
答案 0 :(得分:3)
FileInputStream
尝试从本地文件系统(不存在)中读取文件,而您似乎确实希望从远程文件系统中读取该文件。或者您想将其下载到本地系统,然后从那里阅读?
无论如何,要从远程端下载,请使用ChannelSftp
中的get
方法之一,而不是put
(用于上传)。
答案 1 :(得分:1)
您可以考虑使用Apache VFS来读取远程文件。它简单而强大的lib。