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?

n0pe
fuente

Respuestas:

188

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

jtahlborn
fuente
¡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();
Ing.Fouad
fuente
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.

Jake Roussel
fuente
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();
        }
    }
}
ahmet
fuente
3

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

NathanChristie
fuente
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.

Alejandra
fuente