[英]FTPClient: Not getting timed Out exception
我正在使用以下代码上传文件。 它工作正常,但问题是在文件的任意上传过程中,它被挂起了(不知道是什么原因)。
-可能文件太长。
-可能是Connection不能正常工作。
但它仍然被绞死,最后我不得不手动终止它。 因此,如果发生任何错误,那么无论如何原因,我都无法识别超时,只是略有错误就跳过了该文件。
FTPClient client = new FTPClient();
FileInputStream fis = null;
try {
client.connect("32.178.10.121");
client.login("XXX", "XXX");
//
// Create an InputStream of the file to be uploaded
//
File f = new File("D:\\FileFolder");
if (f.isDirectory())
{
File[] listFiles = f.listFiles();
for (int i = 0; i < listFiles.length; i++)
{
String filename = listFiles[i].getName();
fis = new FileInputStream(filename);
client.storeFile(filename, fis);
}
}
//
// Store file to server
//
client.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
一种选择是您可以在线程中上传文件。 如果花费很长时间,您可以使该线程超时。
您可以为此目的使用ExecutorService服务。
检查此链接以了解如何实现ExecutorService: 如何使线程超时
您是否正在使用apache commons FtpClient? 如果是这样,您可以尝试使用getStatus()连续轮询状态,并在出现某些错误时关闭。 或者,您可以使用setDataTimeout(int timeout)方法设置超时。
如果您使用的是JDK 1.7,建议您降级到1.6。 在Java 7中,FTP似乎有问题,尤其是在使用JDK的库的情况下。 我当时正在做一个程序,它完全冻结了我的计算机,并且会不停地上传,但是降级对我却有效。 如果是更大的应用程序,请使用JDK 1.6设置另一个项目,然后仅尝试FTP部分。
您可能要尝试client.setControlKeepAliveTimeout(300);
请参阅(可能重复): Commons FTPClient在上传大文件后挂起
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.