2010-09-03 3 views
0

Я работаю над разработкой приложения. В этом приложении я выполняю операции хранения, извлечения и удаления файлов. Для идентификации файлов на сервере я использую файл индекса (файл хэш-карты). каждый раз, когда я выполняю операцию загрузки, я обновляю файл «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; 
} 

ответ

1

Вы уверены, что индексный файл корректно загружен?

Он присутствует в файловой системе, когда приложение закрыто?

Какая FTP-библиотека вы используете ?. Я знаю только commons.net от Apache, и я не узнаю метод файла «retrFile». Может ли он быть потоковым, чтобы файл не был полностью загружен при выполнении инструкции readObject?

Смежные вопросы