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?

Réponses:


188

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


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

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.


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

3

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.