CreateNewFile () de Java: ¿también creará directorios?


85

Tengo un condicional para verificar si existe un determinado archivo antes de continuar ( ./logs/error.log). Si no se encuentra, quiero crearlo. Sin embargo,

File tmp = new File("logs/error.log");
tmp.createNewFile();

también crear logs/si no existe?

Respuestas:


188

No.
Úselo tmp.getParentFile().mkdirs()antes de crear el archivo.


¡Ups! Estaba usando "tmp.mkdirs ()". Es por eso que mi archivo se estaba creando como una carpeta
GabrielBB

20
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

6
Propongo usar "mkdirs" en lugar de "mkdir" para que su código también pueda crear carpetas principales no existentes :)
Nimpo

14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

Si los directorios ya existen, no sucederá nada, por lo que no necesita ninguna verificación.


8

Estilo Java 8

Path path = Paths.get("logs/error.log");
Files.createDirectories(path.getParent());

Para escribir en archivo

Files.write(path, "Log log".getBytes());

Leer

System.out.println(Files.readAllLines(path));

Ejemplo completo

public class CreateFolderAndWrite {

    public static void main(String[] args) {
        try {
            Path path = Paths.get("logs/error.log");
            Files.createDirectories(path.getParent());

            Files.write(path, "Log log".getBytes());

            System.out.println(Files.readAllLines(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3

StringUtils.touch(/path/filename.ext) ahora (> = 1.3) también creará el directorio y el archivo si no existen.


1
Disculpe el comentario tardío, pero esto debería ser ahoraFileUtils.touch(new File(file_path))
shark1608

0

No, y si logsno existe recibirásjava.io.IOException: No such file or directory

Dato curioso para los desarrolladores de Android: llama a los gustos de Files.createDirectories()y Paths.get()funcionaría cuando se admite min api 26.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.