【发布时间】:2014-09-04 05:00:50
【问题描述】:
我正在尝试使用 Java 逐行读取文件,这非常简单(stackoverflow.com 上有多种解决方案),但需要注意的是文件位于远程服务器上,并且无法获得本地副本(它是单个 .txt 文件中的数百万亚马逊评论的大量集合)。
JSch 带有两个示例类,它们可以将文件复制到远程主机和从远程主机复制文件,即 ScpTo 和 ScpFrom。我有兴趣从远程主机逐行读取文件; ScpFrom 会尝试将整个内容复制到本地文件中,这需要很长时间。
这里是 ScpFrom 的链接:http://www.jcraft.com/jsch/examples/ScpFrom.java.html
我会尝试在那里加载代码,然后修改它以逐行读取远程文件而不是写入本地文件,但是一旦作者声明一个字节数组并开始,大部分代码对我来说都是希腊语从远程文件中读取字节。我承认这是我几乎不了解的事情; BufferedReader 提供了更高级别的接口。基本上我想这样做:How to read a large text file line by line using Java?
如果提供主机名和用户凭据(密码等),除了使用也可以逐行读取远程文件的 BufferReader,即 RemoteBufferReader?
这是我写的测试代码;如何使用 JSCh 逐行读取远程文件?
public class test2
{
static String user = "myusername";
static String host = "user@remotehost";
static String password = "mypasswd";
static String rfile = "/path/to/remote/file/on/remote/host";
public static void main(String[] args) throws FileNotFoundException, IOException, JSchException
{
JSch jsch=new JSch();
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
session.connect();
// exec 'scp -f rfile' remotely
String command="scp -f "+rfile;
Channel channel=session.openChannel("exec");
((ChannelExec)channel).setCommand(command);
// get I/O streams for remote scp
OutputStream out=channel.getOutputStream();
channel.connect()
//no idea what to do next
}
}
【问题讨论】:
-
我会使用
cat(在远程主机上)而不是scp。然后逐行读取命令行的标准输出。 -
您可以使用 jsch 通过 sftp 打开输入流并逐行读取