Я работаю над разработкой приложения. В этом приложении я выполняю операции хранения, извлечения и удаления файлов. Для идентификации файлов на сервере я использую файл индекса (файл хэш-карты). каждый раз, когда я выполняю операцию загрузки, я обновляю файл «index» и загружаю файл «index» на сервер вместе с другими файлами загрузки.Проблема при отправке файла с сервера FTPS
Для выполнения операции удаления сначала я извлекаю «индексный» файл и на основе индекса я удаляю файлы с сервера, и после обновления файла «index» я снова загружаю файл «index» на сервер.
Я могу успешно выполнить операцию загрузки файлов, но при выполнении операции удаления я получаю исключение «java.io.EOFException», когда пытаюсь извлечь файл «index».
я пишу следующий код для загрузки «индекса» файл с сервера FTPS
//download index file
if (service.retrFile("INDEX", "") == service.OK) {
try {
ObjectInputStream objIn = new ObjectInputStream(new FileInputStream("INDEX"));
try {
Map<String, FileData> filesUploaded = (HashMap<String, FileData>) objIn.readObject();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
objIn.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
Где «service.ok» возвращает «0», если он успешно подключен к серверу FTPS и «FileData» содержит информацию о файле (атрибутах).
Тот же код, который я использую при выполнении операции загрузки. там он работает отлично, без каких-либо исключений. но во время выполнения операции удаления, когда я извлекаю файл «index», я получаю исключение в инструкции:
Файлы картUploaded = (HashMap) objIn.readObject();
Исключение:
СИЛЬНЫЙ: нулевой
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2298)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2767)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:798)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298)
at com.pixelvault.gui.DeleteServerFilesDialog.startDeleting(DeleteServerFilesDialog.java:447)
Я проверил ли соединения сервера FTPS правильно закрыты после выполнения соответствующих операций.
Я не понимаю, где я делаю неправильно.
, пожалуйста, предоставьте мне свои ценные предложения. Я благодарю всех ваших предложений, которые помогут мне преодолеть эту проблему.
я использую org.apache.commons.net.ftp и «retrFile» является метод, созданный мной для извлечения файлов с сервера.
Вот код для "retrFile"
FTPSClient FTP;
public int retrFile (String filename, String savePath) { if (! Connected) { return ERR; }
FileOutputStream fout = null;
InputStream bin = null;
try {
ftp.enterLocalPassiveMode();
fout = new FileOutputStream(savePath + filename);
bin = ftp.retrieveFileStream(filename);
if (bin == null) {
fout.close();
return ERR;
}
byte[] b = new byte[ftp.getBufferSize()];
int bytesRead = 0;
while ((bytesRead = bin.read(b, 0, b.length)) != -1) {
fout.write(b, 0, bytesRead);
}
ftp.completePendingCommand();
fout.close();
} catch (FTPConnectionClosedException ex) {
ex.printStackTrace();
connected = false;
return NOT_CONNECTED;
} catch (IOException ex) {
ex.printStackTrace();
return ERR;
} finally {
try {
fout.close();
} catch (IOException ex) {
ex.printStackTrace();
return ERR;
}
try {
if (bin != null) {
bin.close();
}
} catch (IOException ex) {
ex.printStackTrace();
return ERR;
}
}
return OK;
}