Java's createNewFile () - créera-t-il également des répertoires?

85

J'ai un conditionnel pour vérifier si un certain fichier existe avant de continuer ( ./logs/error.log). S'il n'est pas trouvé, je veux le créer. Cependant, sera

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

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

n0pe
la source

Réponses:

188

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

jtahlborn
la source
Oups. J'utilisais "tmp.mkdirs ()". C'est pourquoi mon fichier a été créé en tant que dossier
GabrielBB
20
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();
Ing. Fouad
la source
6
Je propose d'utiliser "mkdirs" au lieu de "mkdir" pour que votre code puisse également créer des dossiers parents non existants :)
Nimpo
14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

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

Jake Roussel
la source
8

Style Java 8

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

Pour écrire sur fichier

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

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();
        }
    }
}
Ahmet
la source
3

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

NathanChristie
la source
1
Pardonnez le commentaire tardif, mais cela devrait être maintenantFileUtils.touch(new File(file_path))
shark1608
0

Non, et s'il logsn'existe pas, vous recevrezjava.io.IOException: No such file or directory

Fait amusant pour les développeurs Android: appelle les goûts de Files.createDirectories()et Paths.get()fonctionnerait avec la prise en charge de l'API min 26.

Alejandra
la source