package org.jetbrains.jps.util;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author Pavel.Sher
* Date: 05.03.2008
*/
public class TempFiles {
private static final File ourCurrentTempDir = new File(System.getProperty("java.io.tmpdir"));
private final File myCurrentTempDir;
private static Random ourRandom;
static {
ourRandom = new Random();
ourRandom.setSeed(System.currentTimeMillis());
}
private final List<File> myFilesToDelete = new ArrayList<File>();
public TempFiles() {
myCurrentTempDir = ourCurrentTempDir;
if (!myCurrentTempDir.isDirectory()) {
throw new IllegalStateException("Temp directory is not a directory, was deleted by some process: " + myCurrentTempDir.getAbsolutePath());
}
}
private File doCreateTempDir(String prefix, String suffix) throws IOException {
prefix = prefix == null ? "" : prefix;
suffix = suffix == null ? ".tmp" : suffix;
do {
int count = ourRandom.nextInt();
final File f = new File(myCurrentTempDir, prefix + count + suffix);
if (!f.exists() && f.mkdirs()) {
return f.getCanonicalFile();
}
} while (true);
}
private File doCreateTempFile(String prefix, String suffix) throws IOException {
final File file = doCreateTempDir(prefix, suffix);
file.delete();
file.createNewFile();
return file;
}
public final File createTempFile() throws IOException {
File tempFile = doCreateTempFile("test", null);
registerAsTempFile(tempFile);
return tempFile;
}
private void registerAsTempFile(final File tempFile) {
myFilesToDelete.add(tempFile);
}
/**
* Returns a File object for created temp directory.
*
* @return a File object for created temp directory
* @throws IOException if directory creation fails.
*/
public final File createTempDir() throws IOException {
File f = doCreateTempDir("test", "");
registerAsTempFile(f);
return f;
}
public void cleanup() {
for (File file : myFilesToDelete) {
if (file.exists()) {
FileUtil.delete(file);
}
}
myFilesToDelete.clear();
}
}