Удаление файла Java 6 с RandomAccessFile - PullRequest
2 голосов
/ 27 декабря 2011

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

Я работаю над приложением, которое загружает файл с 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());
        }

    }
}

1 Ответ

1 голос
/ 27 декабря 2011

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

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, чтобы они всегда были закрыты.

...