Я создал простой класс Java следующим образом:
Я передаю содержимое в виде байтового массива и имени файла, и класс создает где-то TempFile.
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class TempFile {
private byte[] content;
private File file;
private String fileName;
public TempFile(byte[] content, String fileName)
throws IOException {
this.content = content;
this.fileName = fileName;
file = createTempFile();
}
private File createTempFile()
throws IOException {
String tmpDir = System.getProperty("java.io.tmpdir");
if(!tmpDir.endsWith("/") || !tmpDir.endsWith("\\"))
tmpDir += "/";
File tmpfile = new File(tmpDir + createUniqueName());
while(tmpfile.exists())
tmpfile = new File(tmpDir + createUniqueName());
tmpfile.createNewFile();
FileUtils.writeByteArrayToFile(tmpfile, content);
return tmpfile;
}
@Override
protected void finalize() throws Throwable {
try {
if(file.exists() && file.canRead() && file.canWrite())
file.delete();
} catch(Throwable t) {
t.printStackTrace();
} finally {
super.finalize();
}
}
}
Я думал, что если бы я реализовал очистку в методе finalize, то временные файлы будут автоматически удалены, когда GC избавится от объекта.
Я попытался отладить это, но, похоже, метод finalizeне называется.
В чем причина?Может ли это быть потому, что я развертываю этот сервер Tomcat?
Приветствия