Java 安全通道 (JSch)库提供了用于将 Java 应用程序连接到远程服务器的 API,从而实现了各种远程操作。其强大功能之一是能够直接从远程服务器读取文件,而无需将其下载到本地计算机。
在本教程中,我们将学习如何使用 JSch 连接到远程服务器并逐行读取特定文件。
Maven 依赖
首先,让我们将 JSch依赖项添加到pom.xml中:
<dependency> |
该依赖项提供用于建立与远程服务器的连接并打开 SSH 文件传输协议 (SFTP) 通道进行文件传输的类。
连接远程服务器
让我们创建变量来存储到远程服务器的连接详细信息:
private static final String HOST = "HOST_NAME"; |
HOST可以是远程服务器的域名或 IP 地址。USER是用于向远程服务器进行身份验证的用户名,而PRIVATE_KEY表示SSH私钥身份验证的路径。SSH 端口默认为 22。
接下来,让我们创建一个会话:
JSch jsch = new JSch(); |
在这里,我们创建JSch的一个实例,它是JSch功能的入口点。接下来,我们加载用于身份验证的密钥。然后,我们使用连接详细信息创建一个新的Session对象。为简单起见,我们禁用了严格的主机密钥检查。
使用 JSch 读取远程文件
建立会话后,让我们为 SFTP 创建一个新的通道:
ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp"); |
在上面的代码中,我们创建了一个ChannelSftp实例,并通过调用它的connect()方法来建立连接。
现在我们已经打开了 SFTP 通道,我们可以列出远程目录中的文件,以轻松找到我们想要读取的文件。
我们定义一个字段来存储远程文件的路径:
private static final String filePath = "REMOTE_DIR/examplefile.txt"; |
接下来让我们远程连接该文件并读取其内容:
InputStream stream = channelSftp.get(filePath); |
这里,我们创建了一个BufferedReader实例,它接受InputStream对象作为参数,以便有效地读取文件。由于InputStream返回的是字节流,InputStreamReader可帮助将其解码为字符。
最后,我们调用BufferedReader对象上的readLine() 方法并使用 while 循环遍历所有行。
我们不需要明确关闭BufferedReader对象,因为它在try-with-resources块中使用。
关闭连接
成功读取文件后,我们需要关闭 SSH 会话和 SFTP 通道:
channelSftp.disconnect(); |
在上面的代码中,我们调用Session和ChannelSftp对象上的disconnect()方法来关闭连接并释放资源。