2011-12-27 1 views
2

Я действительно разочарован обсуждением аналогичной проблемы с удалением java 6 и невозможностью найти решение на этих похожих сообщениях при удалении Flie Post1 и Post2.Удаление файла Java 6 с помощью RandomAccessFile

Я работаю над приложением, которое загружает файл с FTP-сервера. Эта загрузка достигается путем получения потока, чтения из этого потока и записи его в файл RandomAccessFile. В случае коррумпированных загрузок я хочу удалить файл на диске.

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

Наконец, фрагмент кода

public class OprDownload extends Observable implements Runnable 
{ 
    public void run() 
    { 
    //Code to connect to ftp,obtain the stream and write to a file 
    if (download complete) 
    { 

     if(mwwObjFile!=null) 
     { 
      mwwObjFile.close(); 

     } 
     if(stream!=null) 
     { 
      stream.close(); 
     } 
     if(compareChecksum())//If checksum match success 
     { 
      updateDownloadDetails(); 
      cwwIntStatus = COMPLETE; 
     } 
     else 
     { 
      cwwIntStatus = CHECKSUM_FAIL; 
      deleteCorruptUpdateFromDownloadsFolder(); 
     } 
    } 
} 

    public void deleteCorruptUpdateFromDownloadsFolder() 
    { 
     String fileOndisk = "FileName"; 
     File mwwFileToBeDeleted = new File(fileOndisk); 

     if(mwwFileToBeDeleted .exists()) 
     { 
      System.out.println("File Deleted"+mwwFileToBeDeleted .delete()); 
     } 

    } 
} 
+2

Ваш код контрольной суммы для сравнения читается из файла? Если да, закрывает ли он все потоки? –

+0

Bingo !! Хорошо, я не могу поверить, что я не закрыл файловые объекты в коде контрольной суммы сравнения. Спасибо – shabeena

ответ

1

Если бросить любое непроверенное исключение здесь, файл (ы) не будет закрыт.

public void run() 
{ 
    //Code to connect to ftp,obtain the stream and write to a file 
    if (download complete) // throws an unchecked exception and exits run() 
    { 

Вы должны закрыть свои ресурсы в finally блоке таким образом, они всегда будут закрыты.

+1

Да, я закрыл ресурсы в блоке finally в фактическом коде. Он отредактировал его здесь, чтобы сделать сниппет короче. В любом случае. – shabeena