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).