Подтвердить что ты не робот

Удалить временный файл в java

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

    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();
   }

}

Ответ 5

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();
      }
   }
}