удалить временный файл в Java - PullRequest
19 голосов
/ 22 июня 2009

Я создаю временный файл в Java, но не могу удалить его. Это код, который я написал:

temp = File.createTempFile("temp", ".txt");
temp.deleteOnExit();
fileoutput = new FileWriter(temp);
buffout = new BufferedWriter(fileoutput);

Ответы [ 5 ]

23 голосов
/ 22 июня 2009

Добавьте следующий код (после выполнения операций с файлом):

buffout.close();
fileoutput.close();
temp.delete();

Пока какой-либо поток в файле открыт, он блокируется (по крайней мере, в реализации Windows JVM). Поэтому его нельзя удалить.

Рекомендуется всегда проверять, все ли открытые потоки закрываются снова после использования, потому что это плохая ситуация утечки памяти. Ваше приложение может даже поглотить все доступные файловые дескрипторы, что может привести к неработоспособности системы.

3 голосов
/ 22 июня 2009

Есть ошибка , говорящая о том, что если файл открыт автором файлов или чем-то еще, он не будет удален На окнах. Проверьте, не закрыли ли вы файловые программы.

Другим обходным решением будет установка ShutdownHook , который удалит файл вручную.

0 голосов
/ 17 января 2019
import java.io.File;
import java.io.IOException;

public class TemporaryFileExample
{
   public static void main(String[] args)
   {
      File temp;
      try
      {
         temp = File.createTempFile("myTempFile", ".txt");

         System.out.println("Temp file created : " + temp.getAbsolutePath());

         //temp.delete(); //For deleting immediately

         temp.deleteOnExit(); //Delete on runtime exit

         System.out.println("Temp file exists : " + temp.exists());
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
}
0 голосов
/ 09 декабря 2018

Код для закрытия входного потока и выходного потока:

    FileInputStream in = new FileInputStream();

     ArrayList list_in = new ArrayList<FileInputStream>();

     list_in.add(in);

     FileOutputStream out = new FileOutputStream();

     ArrayList list_out = new ArrayList<OutputputStream>();

     list_in.add(out);

     public do_before_exit()
     {

      for(int i=0;i<list_in.size();i++)
      {
      FileInputStream in=(FileInputStream)list_in.get(i)
       FileInputStream out=(FileInputStream)list_out.get(i)

      in.close()
    out.close();
   }

}
0 голосов
/ 22 июня 2009

Вы должны полностью выключить ВМ , чтобы deleteOnExit работал правильно (я подозреваю). На UNIX a kill будет чистое отключение (то есть ShutdownHooks будет обработано), тогда как kill -9 будет больше похоже на force quit .

deleteOnExit определенно работает для меня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...