JAVA:FTPClient报错 org.apache.commons.net.MalformedServerReplyException: Could not parse response code

报错信息如下:

Exception in thread "main" org.apache.commons.net.MalformedServerReplyException: Could not parse response code. Server Reply: SSH-2.0-OpenSSH_8.0 at org.apache.commons.net.ftp.FTP.getReply(FTP.java:344) at org.apache.commons.net.ftp.FTP.getReply(FTP.java:300) at org.apache.commons.net.ftp.FTP.connectAction(FTP.java:438) at org.apache.commons.net.ftp.FTPClient.connectAction(FTPClient.java:962) at org.apache.commons.net.ftp.FTPClient.connectAction(FTPClient.java:950) at org.apache.commons.net.SocketClient._connect(SocketClient.java:244) at org.apache.commons.net.SocketClient.connect(SocketClient.java:202) at com.lyk.myproject01.controller.Tesn.main(Tesn.java:58)

报错代码demo:

FTPClient ftpClient = new FTPClient();
ftpClient.connect("服务器ip", 22);
ftpClient.login("用户", "密码");
int reply = ftpClient.getReply();
if (!FTPReply.isPositiveCompletion(reply)) {
    ftpClient.disconnect();
}
ftpClient.setControlEncoding("GBK");
InputStream inputStream = ftpClient.retrieveFileStream("/home/test/abc.txt");
byte[] bytes = new byte[10];
OutputStream outputStream = new FileOutputStream("D:\\2temp\\home\\data\\abc.txt");
int len;
while ((len = inputStream.read(bytes)) != -1){
    outputStream.write(bytes, 0, len);
}
outputStream.close();
inputStream.close();

报错原因:服务器未开启FTP服务(未安装FTP软件)

解决方法:

1 、不改代码,依旧通过FTPClient 方式连接。此方式需服务器开启FTP服务(安装FTP软件)参考文档 linux下如何启动ftp服务,如何在linux下开启FTP服务_靖dede的博客-CSDN博客

2、换种连接方式,通过ChannelSftp 方式连接。参考文档 https://www.jianshu.com/p/65cd4f15f69c

代码实现:

添加maven依赖

<dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.49</version>
</dependency>
Session session = null;
JSch jSch = new JSch();
session = jSch.getSession("用户名","服务器ip");
session.setPassword("密码");
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
session.setConfig(sshConfig);
session.connect();
ChannelSftp channelSftp = (ChannelSftp)session.openChannel("sftp");
channelSftp.connect();
channelSftp.get("/home/test/abc.txt","D:\\2temp\\home\\data\\");
if (null != session){
    channelSftp.disconnect();
    session.disconnect();
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值