2. 1. Maven依赖

首先,在pom.xml中添加JSch依赖:

<dependency>
    <groupId>com.github.mwiede</groupId>
    <artifactId>jsch</artifactId>
    <version>0.2.20</version>
</dependency>

该依赖提供了建立远程服务器连接和打开SFTP通道所需的类。

3. 2. 连接远程服务器

定义远程服务器连接参数:

private static final String HOST = "HOST_NAME";
private static final String USER = "USERNAME";
private static final String PRIVATE_KEY = "PRIVATE_KEY";
private static final int PORT = 22;
  • HOST:远程服务器的域名或IP地址
  • USER:认证用户名
  • PRIVATE_KEY:SSH私钥路径
  • PORT:SSH默认端口22

创建会话连接:

JSch jsch = new JSch();
jsch.addIdentity(PRIVATE_KEY);
Session session = jsch.getSession(USER, HOST, PORT);
session.setConfig("StrictHostKeyChecking", "no");
session.connect();

关键步骤:

  1. 初始化JSch实例
  2. 加载认证密钥
  3. 创建会话对象
  4. 禁用严格主机密钥检查(开发环境常用)
  5. 建立连接

⚠️ 生产环境应启用主机密钥验证

4. 3. 使用JSch读取远程文件

建立SFTP通道:

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

定义远程文件路径:

private static final String filePath = "REMOTE_DIR/examplefile.txt";

逐行读取文件内容:

InputStream stream = channelSftp.get(filePath);
try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream))) {
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        LOGGER.info(line);
    }
}

核心逻辑解析:

  1. 通过channelSftp.get()获取文件输入流
  2. 使用InputStreamReader将字节流解码为字符流
  3. BufferedReader实现高效逐行读取
  4. try-with-resources自动关闭资源
  5. 循环处理每行内容

✅ 优势:无需下载完整文件即可处理大文件

5. 4. 关闭连接

操作完成后关闭资源:

channelSftp.disconnect();
session.disconnect();

必须显式关闭:

  1. SFTP通道
  2. SSH会话

❌ 否则会导致资源泄漏

6. 5. 总结

通过JSch库实现远程文件读取的核心步骤:

  1. 添加Maven依赖
  2. 配置认证信息建立SSH会话
  3. 打开SFTP通道
  4. 使用BufferedReader逐行处理文件
  5. 规范关闭连接

完整源码可在GitHub仓库获取。


原始标题:Java JSch Library to Read Remote File Line by Line | Baeldung