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();
关键步骤:
- 初始化JSch实例
- 加载认证密钥
- 创建会话对象
- 禁用严格主机密钥检查(开发环境常用)
- 建立连接
⚠️ 生产环境应启用主机密钥验证
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);
}
}
核心逻辑解析:
- 通过
channelSftp.get()
获取文件输入流 - 使用
InputStreamReader
将字节流解码为字符流 BufferedReader
实现高效逐行读取- try-with-resources自动关闭资源
- 循环处理每行内容
✅ 优势:无需下载完整文件即可处理大文件
5. 4. 关闭连接
操作完成后关闭资源:
channelSftp.disconnect();
session.disconnect();
必须显式关闭:
- SFTP通道
- SSH会话
❌ 否则会导致资源泄漏
6. 5. 总结
通过JSch库实现远程文件读取的核心步骤:
- 添加Maven依赖
- 配置认证信息建立SSH会话
- 打开SFTP通道
- 使用BufferedReader逐行处理文件
- 规范关闭连接
完整源码可在GitHub仓库获取。