FTPClient: Не получено исключение по тайм-ауту

Я использую следующий код для загрузки файла. это работает нормально, но проблема в том, что при загрузке процесса произвольно на файл он завис (не знаю, в чем причина).

-Может быть, файл слишком длинный.

-Может быть, соединение не работает нормально.

но он остается повешенным, и, наконец, я должен прекратить его вручную. так что, если что-то не так, то как я могу узнать время ожидания не имеет значения, по какой-то причине просто пропустите этот файл с некоторой ошибкой.

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

3 ответа

Если вы используете JDK 1.7, я бы порекомендовал попробовать понизиться до 1.6. Похоже, что в Java 7 глючит FTP, особенно если вы используете библиотеки JDK. Я делал программу, и она просто полностью замораживала мой компьютер и загружала его снова и снова, но понижение работало для меня. Если это более крупное приложение, создайте другой проект с установленным JDK 1.6 и попробуйте только часть FTP.

Вы можете попробовать client.setControlKeepAliveTimeout(300);

Смотрите (возможно дублирование): Commons FTPClient зависает после загрузки большого файла

Один из вариантов - вы можете загрузить файл в ветке. И вы можете приостановить эту ветку, если она занимает много времени.

Вы можете использовать сервис ExecutorService для этой цели.

Посмотрите эту ссылку, чтобы узнать, как реализовать ExecutorService: как остановить поток

Используете ли вы Apache Commons FtpClient? Если это так, вы можете попробовать использовать getStatus() для непрерывного опроса статуса и закрытия в случае какой-либо ошибки. Или вы можете установить время ожидания, используя метод setDataTimeout(int timeout).

Другие вопросы по тегам