CreateNewFile () di Java - creerà anche directory?


85

Ho un condizionale per verificare se esiste un determinato file prima di procedere ( ./logs/error.log). Se non viene trovato, voglio crearlo. Tuttavia, lo farà

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

creare anche logs/se non esiste?

Risposte:


188

No.
Utilizzare tmp.getParentFile().mkdirs()prima di creare il file.


Ops. Stavo usando "tmp.mkdirs ()". Ecco perché il mio file è stato creato come cartella
GabrielBB

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

6
Propongo di usare "mkdirs" invece di "mkdir" in modo che il tuo codice possa anche creare cartelle padre non esistenti :)
Nimpo

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

Se le directory esistono già, non accadrà nulla, quindi non è necessario alcun controllo.


8

Stile Java 8

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

Scrivere su file

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

Leggere

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

Esempio 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) ora (> = 1.3) creerà anche la directory e il file se non esistono.


1
Perdonate il commento in ritardo, ma ora dovrebbe essereFileUtils.touch(new File(file_path))
shark1608

0

No, e se logsnon esiste riceveraijava.io.IOException: No such file or directory

Fatto divertente per sviluppatori Android: chiamate simili a Files.createDirectories()e Paths.get()funzionerebbero quando si supporta l'api minimo 26.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.