开发者社区> 问答> 正文

Java上传到fth时提示Connection closed without indication

如题,自己在系统中直接上传的话是可以的,但用代码上传就不行了,代码是这样的

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
public class Upload
{
/**
Description: 向FTP服务器上传文件
@param url FTP服务器hostname
@param port FTP服务器端口
@param username FTP登录账号
@param password FTP登录密码
@param path FTP服务器保存目录
@param filename 上传到FTP服务器上的文件名
@param input 输入流
@return 成功返回true,否则返回false
*/ 
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) { 
boolean success = false; 
FTPClient ftp = new FTPClient(); 
try
{ 
int reply; 
ftp.connect(url, port);//连接FTP服务器 
//如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
ftp.login(username, password);//登录 
reply = ftp.getReplyCode(); 
if (!FTPReply.isPositiveCompletion(reply))
{ 
ftp.disconnect();
return success; 
} 
ftp.changeWorkingDirectory(path); 
ftp.storeFile(filename, input);
input.close();
ftp.logout();
success = true;
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
return success;
}
public static void main(String[] args)
{
try
{
String filepath = "D:/upload/liuqian.txt";
FileInputStream in = new FileInputStream(new File(filepath));
boolean flag = uploadFile("localhost", 21, "lq", "123", "D:/upload", "walmartDemo", in);
System.out.println(flag);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

提示出错信息

org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication.
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:317)
at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:294)
at org.apache.commons.net.ftp.FTP._connectAction_(FTP.java:400)
at org.apache.commons.net.ftp.FTPClient._connectAction_(FTPClient.java:924)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:183)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:203)
at cn.com.sensetech.ftp.Upload.uploadFile(Upload.java:30)
at cn.com.sensetech.ftp.Upload.main(Upload.java:105)
false

调试的时候发现错误出现在这里

finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (Exception e)
{
e.printStackTrace();
}
}

这究竟是怎么回事啊,怎么修改才能够跑通?

展开
收起
蛮大人123 2016-06-06 11:54:25 15363 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    需要注意的是,ftp.isConnected最好要写在finally里面,不要直接写在ftp.logout()后面.

    2019-07-17 19:28:09
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载