web-dev-qa-db-fra.com

Utilisation de Java nio pour créer un sous-répertoire et un fichier

Je crée un programme simple qui essaiera de lire "conf/conf.xml" à partir du disque, mais si ce fichier ou ce répertoire n'existe pas, les créer à la place.

Je peux le faire en utilisant le code suivant:

    // create subdirectory path
    Path confDir = Paths.get("./conf"); 

    // create file-in-subdirectory path
    Path confFile = Paths.get("./conf/conf.xml"); 

    // if the sub-directory doesn't exist then create it
    if (Files.notExists(confDir)) { 
        try { Files.createDirectory(confDir); }
        catch (Exception e ) { e.printStackTrace(); }
    }

    // if the file doesn't exist then create it
    if (Files.notExists(confFile)) {
        try { Files.createFile(confFile); }
        catch (Exception e ) { e.printStackTrace(); }
    }

Ma question est de savoir si c'est vraiment la façon la plus élégante de le faire? Il semble superflu de devoir créer deux chemins simples pour créer un nouveau fichier dans un nouveau sous-répertoire.

18
user3341332

Vous pouvez déclarer votre confFile comme File au lieu de Path. Ensuite, vous pouvez utiliser confFile.getParentFile().mkdirs();, voir l'exemple ci-dessous:

// ...

File confFile = new File("./conf/conf.xml"); 
confFile.getParentFile().mkdirs();

// ...

Ou, en utilisant votre code tel quel, vous pouvez utiliser:

Files.createDirectories(confFile.getParent());
18
Marko Grešak

Vous pouvez effectuer les opérations suivantes:

// Get your Path from the string
Path confFile = Paths.get("./conf/conf.xml"); 
// Get the portion of path that represtents directory structure.  
Path subpath = confFile.subpath(0, confFile.getNameCount() - 1);
// Create all directories recursively
/**
     * Creates a directory by creating all nonexistent parent directories first.
     * Unlike the {@link #createDirectory createDirectory} method, an exception
     * is not thrown if the directory could not be created because it already
     * exists.
     *
*/
Files.createDirectories(subpath.toAbsolutePath()))
0
user3504158