繁体   English   中英

FTPClient:未超时异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM