Есть ли существующий FileInputStream delete при закрытии?
Существует ли существующий способ, чтобы FileInputStream
автоматически удалял базовый файл при закрытии?
Я планировал сделать свой собственный класс утилиты для расширения FileInputStream
и сделать это сам, но я удивлен, что нет уже существующего.
edit: Используйте случай, когда у меня есть действие Struts 2, которое возвращает InputStream
для загрузки файла со страницы. Насколько я могу судить, я не получаю уведомление, когда действие закончено, или FileInputStream
больше не используется, и я не хочу, чтобы (потенциально большие) временные файлы, которые были сгенерированы для загрузки слева лежащий вокруг.
Вопрос не касался Struts 2, поэтому я не включил эту информацию изначально и усложнил вопрос.
Ответы
Ответ 1
В стандартных библиотеках нет такой вещи, а не любой из apache-commons libs, поэтому что-то вроде:
public class DeleteOnCloseFileInputStream extends FileInputStream {
private File file;
public DeleteOnCloseFileInputStream(String fileName) throws FileNotFoundException{
this(new File(fileName));
}
public DeleteOnCloseFileInputStream(File file) throws FileNotFoundException{
super(file);
this.file = file;
}
public void close() throws IOException {
try {
super.close();
} finally {
if(file != null) {
file.delete();
file = null;
}
}
}
}
Ответ 2
Можете ли вы использовать File.deleteOnExit() перед открытием файла?
EDIT: вы можете подклассифицировать FileInputStream, который удалит файл в 'close()';
class MyFileInputStream extends FileInputStream
{
File file;
MyFileInputStream(File file) { super(file); this.file=file;}
public void close() { super.close(); file.delete();}
}
Ответ 3
Я знаю, что это старый вопрос, но я просто столкнулся с этой проблемой и нашел другой ответ: javax.ws.rs.core.StreamingOutput.
Вот как я его использовал:
File downloadFile = ...figure out what file to download...
StreamingOutput so = new StreamingOutput(){
public void write(OutputStream os) throws IOException {
FileUtils.copyFile(downloadFile, os);
downloadFile.delete();
}
ResponseBuilder response = Response.ok(so, mimeType);
response.header("Content-Disposition", "attachment; filename=\""+downloadFile.getName()+"\"");
result = response.build();