94 votes

La fonction createNewFile() de Java créera-t-elle aussi des répertoires ?

J'ai une condition pour vérifier si un certain fichier existe avant de poursuivre ( ./logs/error.log ). S'il n'existe pas, je veux le créer. Cependant, est-ce que

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

créer également logs/ s'il n'existe pas ?

204voto

jtahlborn Points 32515

Non.
Utilisez tmp.getParentFile().mkdirs() avant de créer le fichier.

0 votes

Oups. J'utilisais "tmp.mkdirs()". C'est pourquoi mon fichier a été créé en tant que dossier.

22voto

Eng.Fouad Points 44085
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

7 votes

Je propose d'utiliser "mkdirs" au lieu de "mkdir" pour que votre code puisse également créer des dossiers parents inexistants :)

14voto

Jake Roussel Points 327
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

Si les répertoires existent déjà, rien ne se passera, vous n'avez donc pas besoin de vérifier.

10voto

ahmet Points 985

Style Java 8

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

Pour écrire sur le fichier

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

A lire

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

Exemple complet

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

3voto

NathanChristie Points 1490

StringUtils.touch(/path/filename.ext) va maintenant (>=1.3) également créer le répertoire et le fichier s'ils n'existent pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X