Удалить временный файл в java
Я создаю временный файл в java, но я не могу его удалить. Это код, который я написал:
temp = File.createTempFile("temp", ".txt");
temp.deleteOnExit();
fileoutput = new FileWriter(temp);
buffout = new BufferedWriter(fileoutput);
Ответы
Ответ 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();
}
}
}