Saltar al contenido

¿Cómo crear un directorio/carpeta temporal en Java?

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));

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *