web-dev-qa-db-ja.com

Java nioを使用してサブディレクトリとファイルを作成する

ディスクから「conf/conf.xml」を読み取ろうとする単純なプログラムを作成していますが、このファイルまたはディレクトリが存在しない場合は、代わりに作成します。

次のコードを使用してこれを行うことができます:

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

私の質問は、これが本当にこれを行う最もエレガントな方法かどうかです。新しいサブディレクトリに新しいファイルを作成するために単純な2つのパスを作成する必要があるのは不必要に思えます。

18
user3341332

confFileFileではなくPathとして宣言できます。次に、confFile.getParentFile().mkdirs();を使用できます。以下の例を参照してください:

// ...

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

// ...

または、コードをそのまま使用して、以下を使用できます。

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

次のことができます。

// 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