0

我正在使用以下代码上传文件。它工作正常,但问题是在上传任意文件的过程中它被挂起(不知道是什么原因)。

- 可能是文件太长。

- 可能是连接无法正常工作。

但它仍然挂起,最后我必须手动终止它。因此,如果有任何问题,那么我如何才能识别超时并不重要,无论什么原因只是跳过该文件并出现一些错误。

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();
    }
}
4

3 回答 3

0

如果您使用的是 JDK 1.7,我建议您尝试降级到 1.6。似乎 FTP 在 java 7 中存在缺陷,尤其是在您使用 JDK 的库时。我正在做一个程序,它只是完全冻结了我的计算机,并且会不断上传,但降级对我有用。如果它是一个更大的应用程序,请使用 JDK 1.6 设置另一个项目并尝试仅 FTP 部分。

于 2013-04-03T12:16:50.723 回答
0

一种选择是您可以在线程中上传文件。如果需要很长时间,您可以使该线程超时。

为此,您可以使用ExecutorService服务。

检查此链接以了解如何实现 ExecutorService: 如何使线程超时

你在使用 apache commons FtpClient 吗?如果是这样,您可以尝试使用getStatus()来不断轮询状态并在出现错误时关闭。或者您可以使用setDataTimeout(int timeout)方法设置超时。

于 2013-04-03T12:06:18.817 回答
0

你可能想试试client.setControlKeepAliveTimeout(300);

请参阅(可能重复):Commons FTPClient 在上传大文件后挂起

于 2013-04-03T12:24:28.887 回答