Я создаю временный файл в java, но я не могу его удалить. Это код, который я написал:
temp = File.createTempFile("temp", ".txt");
temp.deleteOnExit();
fileoutput = new FileWriter(temp);
buffout = new BufferedWriter(fileoutput);
Я создаю временный файл в java, но я не могу его удалить. Это код, который я написал:
temp = File.createTempFile("temp", ".txt");
temp.deleteOnExit();
fileoutput = new FileWriter(temp);
buffout = new BufferedWriter(fileoutput);
Добавьте следующий код (после того, как вы выполнили свои операции с файлом):
buffout.close();
fileoutput.close();
temp.delete();
Пока какой-то поток в файле открыт, он заблокирован (по крайней мере, на Windows-реализации JVM). Поэтому его нельзя удалить.
Рекомендуется всегда проверять, закрываются ли все открытые потоки после использования, потому что это плохая ситуация с утечкой памяти. Ваше приложение может даже съесть все доступные файлы-ручки, что может привести к непригодной системе.
Здесь bug, говорящий, что если файл открыт файловым автором или чем-то еще, он не будет удален. На окнах. Проверьте, закрываете ли вы своих файлов.
Другим обходным решением будет установка ShutdownHook, который вручную удалит файл.
Вам нужно отключить виртуальную машину, чтобы deleteOnExit
работал правильно (я подозреваю). На UNIX
a kill
будет чистое выключение (т.е. Будет обрабатываться ShutdownHooks
), тогда как a kill -9
будет больше похоже на принудительное завершение.
deleteOnExit
определенно работает для меня!
Код для закрытия входного потока и выходного потока:
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();
}
}
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();
}
}
}