mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
use owr own shutdown hook to delete temp folders marked as deleteOnExit
This commit is contained in:
@@ -32,7 +32,9 @@ import java.nio.channels.FileChannel;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
/**
|
||||
* Stripped-down version of {@code com.intellij.openapi.util.io.FileUtil}.
|
||||
@@ -298,7 +300,9 @@ public class FileUtilRt {
|
||||
boolean deleteOnExit) throws IOException {
|
||||
File file = doCreateTempFile(dir, prefix, suffix, true);
|
||||
if (deleteOnExit) {
|
||||
file.deleteOnExit();
|
||||
//file.deleteOnExit();
|
||||
// default deleteOnExit does not remove dirs if they are not empty
|
||||
FilesToDeleteHolder.ourFilesToDelete.add(file.getPath());
|
||||
}
|
||||
if (!file.isDirectory()) {
|
||||
throw new IOException("Cannot create directory: " + file);
|
||||
@@ -306,6 +310,25 @@ public class FileUtilRt {
|
||||
return file;
|
||||
}
|
||||
|
||||
private static class FilesToDeleteHolder {
|
||||
public static final Queue<String> ourFilesToDelete = createFilesToDelete();
|
||||
|
||||
private static Queue<String> createFilesToDelete() {
|
||||
final ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
|
||||
Runtime.getRuntime().addShutdownHook(new Thread("FileUtil deleteOnExit") {
|
||||
@Override
|
||||
public void run() {
|
||||
String name = queue.poll();
|
||||
while (name != null) {
|
||||
delete(new File(name));
|
||||
name = queue.poll();
|
||||
}
|
||||
}
|
||||
});
|
||||
return queue;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static File createTempFile(@NotNull @NonNls String prefix, @Nullable @NonNls String suffix) throws IOException {
|
||||
return createTempFile(prefix, suffix, true); // deleteOnExit by default
|
||||
|
||||
Reference in New Issue
Block a user