java sftp 读取文件_Java代码获取SFTP服务器文件

与下游联调时遇到的问题, 一般我们会使用ftp来传递文件, 因为sftp的传输效率很低. 所以为了兼容,引用了网上的方法.

步骤

导入所需Jar包

编写工具类

代码中运用

1. 导入 Jsch-0.1.54.jar

直接去maven库中下载即可

2. 编写工具类--SFTPUtil.java

1 /**

2 * @author shansm

3 * @date 2020/3/18 -17:27

4 */

5 public class SFTPUtil {

6

7 private transient Logger log = LoggerFactory.getLogger(this.getClass());

8

9 private ChannelSftp sftp;

10

11 private Session session;

12 /** SFTP 登录用户名*/

13 private String username;

14 /** SFTP 登录密码*/

15 private String password;

16 /** 私钥 */

17 private String privateKey;

18 /** SFTP 服务器地址IP地址*/

19 private String host;

20 /** SFTP 端口*/

21 private int port;

22

23

24 /**

25 * 构造基于密码认证的sftp对象

26 */

27 public SFTPUtil(String username, String password, String host, int port) {

28 this.username = username;

29 this.password = password;

30 this.host = host;

31 this.port = port;

32 }

33

34 /**

35 * 构造基于秘钥认证的sftp对象

36 */

37 public SFTPUtil(String username, String host, int port, String privateKey) {

38 this.username = username;

39 this.host = host;

40 this.port = port;

41 this.privateKey = privateKey;

42 }

43

44 public SFTPUtil(){}

45

46 /**

47 * 初始化ftp参数

48 * @param resultFileURL

49 */

50 public SFTPUtil(String resultFileURL , String keys) throws Exception {

51 Map map = URLUtil.parseSftp(resultFileURL);

52 init(map.get("ipAddress"),map.get("ipPort"),map.get("userName"),map.get("passWord"),keys);

53 log.info("ip: " map.get("ipAddress"));

54 log.info("port: " map.get("ipPort"));

55 log.info("userName: " map.get("userName"));

56 log.info("PassWord: " map.get("passWord"));

57 }

58

59 /**初始化参数**/

60 private voi

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!要在Java中直接从SFTP服务器读取文件,您可以使用JSch库来实现。JSch是一个用于实现SSH连接的Java库,支持SFTP协议。 下面是一个从SFTP服务器读取文件并将其写入本地文件的示例代码: ```java import com.jcraft.jsch.*; import java.io.*; public class SftpReader { public static void main(String[] args) { String user = "username"; String password = "password"; String host = "sftp.example.com"; int port = 22; String remoteFile = "/path/to/remote/file.txt"; String localFile = "/path/to/local/file.txt"; try { JSch jsch = new JSch(); Session session = jsch.getSession(user, host, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); Channel channel = session.openChannel("sftp"); channel.connect(); ChannelSftp sftpChannel = (ChannelSftp) channel; InputStream inputStream = sftpChannel.get(remoteFile); OutputStream outputStream = new FileOutputStream(localFile); byte[] buffer = new byte[1024]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } outputStream.close(); inputStream.close(); sftpChannel.exit(); session.disconnect(); } catch (JSchException | SftpException | IOException e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们使用JSch库创建了一个SFTP连接,并使用`ChannelSftp`对象从SFTP服务器获取文件。然后,我们使用Java的输入输出流将文件内容写入本地文件。 需要注意的是,如果您从SFTP服务器读取文件非常大,那么将整个文件读入内存可能会导致内存溢出。在这种情况下,您可以考虑使用Java NIO(New IO)来实现更高效的文件读取

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值