gpt4 book ai didi

java - 如何使用Java JSch库逐行读取远程文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:24 24 4
gpt4 key购买 nike

我正在尝试使用 Java 逐行读取文件,这非常简单(在 stackoverflow.com 上有多种解决方案),但这里需要注意的是该文件位于远程服务器上,并且无法获得本地副本(它是单个 .txt 文件中数百万亚马逊评论的大量集合)。

JSch 带有两个示例类,它们将文件复制到远程主机或从远程主机复制文件,即 ScpTo 和 ScpFrom。我有兴趣逐行从远程主机读取文件; ScpFrom 会尝试将整个内容复制到本地文件中,这会花费很长时间。

这是 ScpFrom 的链接:http://www.jcraft.com/jsch/examples/ScpFrom.java.html

我会尝试在那里加载代码,然后修改它以逐行读取远程文件而不是写入本地文件,但是一旦作者声明了一个字节数组并开始,大部分代码对我来说都是希腊语从远程文件读取字节。我承认这是我几乎不了解的事情; BufferedReader 提供了更高级别的接口(interface)。本质上我想这样做: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

}
}

最佳答案

要通过 ssh 操作文件,最好使用 sftp 而不是 scp 或纯 ssh。 Jsch 内置了对 sftp 的支持。打开 session 后,执行此操作以打开 sftp channel :

ChannelSftp sftp = (ChannelSftp) session.openChannel("sftp");

打开 sftp channel 后,there are methods读取一个远程文件,它允许您以 InputStream 的形式访问文件的内容。如果需要逐行阅读,可以将其转换为 Reader:

InputStream stream = sftp.get("/some/file");
try {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
// read from br
} finally {
stream.close();
}

使用 try with resources语法,您的代码可能看起来更像这样:

try (InputStream is = sftp.get("/some/file");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr)) {
// read from br
}

关于java - 如何使用Java JSch库逐行读取远程文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25657603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com