Estate atento ya que en esta noticia hallarás la solución que buscas.
Solución:
Si usa JDK 7, use la nueva clase Files.createTempDirectory para crear el directorio temporal.
Path tempDirWithPrefix = Files.createTempDirectory(prefix);
Antes de JDK 7, esto debería hacerlo:
public static File createTempDirectory()
throws IOException
final File temp;
temp = File.createTempFile("temp", Long.toString(System.nanoTime()));
if(!(temp.delete()))
throw new IOException("Could not delete temp file: " + temp.getAbsolutePath());
if(!(temp.mkdir()))
throw new IOException("Could not create temp directory: " + temp.getAbsolutePath());
return (temp);
Podría hacer mejores excepciones (subclase IOException) si lo desea.
La biblioteca de Google Guava tiene un montón de utilidades útiles. Una de las notas aquí es la clase Archivos. Tiene un montón de métodos útiles que incluyen:
File myTempDir = Files.createTempDir();
Esto hace exactamente lo que pediste en una línea. Si lee la documentación aquí, verá que la adaptación propuesta de File.createTempFile("install", "dir")
normalmente introduce vulnerabilidades de seguridad.
Si necesita un directorio temporal para realizar pruebas y está utilizando jUnit, @Rule
Juntos con TemporaryFolder
resuelve tu problema:
@Rule
public TemporaryFolder folder = new TemporaryFolder();
De la documentación:
La regla de carpeta temporal permite la creación de archivos y carpetas que se garantiza que se eliminarán cuando finalice el método de prueba (ya sea que pase o falle)
Actualizar:
Si usa JUnit Jupiter (versión 5.1.1 o superior), tiene la opción de usar JUnit Pioneer, que es el JUnit 5 Extension Pack.
Copiado de la documentación del proyecto:
Por ejemplo, la siguiente prueba registra la extensión para un solo método de prueba, crea y escribe un archivo en el directorio temporal y verifica su contenido.
@Test
@ExtendWith(TempDirectory.class)
void test(@TempDir Path tempDir)
Path file = tempDir.resolve("test.txt");
writeFile(file);
assertExpectedFileContent(file);
Más info en el JavaDoc y el JavaDoc de TempDirectory
Gradle:
dependencies
testImplementation 'org.junit-pioneer:junit-pioneer:0.1.2'
Experto:
org.junit-pioneer
junit-pioneer
0.1.2
test
Actualización 2:
La anotación @TempDir se agregó a la versión JUnit Jupiter 5.4.0 como característica experimental. Ejemplo copiado de la Guía del usuario de JUnit 5:
@Test
void writeItemsToFile(@TempDir Path tempDir) throws IOException
Path file = tempDir.resolve("test.txt");
new ListWriter(file).write("a", "b", "c");
assertEquals(singletonList("a,b,c"), Files.readAllLines(file));