ディスクから「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つのパスを作成する必要があるのは不必要に思えます。
confFile
をFile
ではなくPath
として宣言できます。次に、confFile.getParentFile().mkdirs();
を使用できます。以下の例を参照してください:
// ...
File confFile = new File("./conf/conf.xml");
confFile.getParentFile().mkdirs();
// ...
または、コードをそのまま使用して、以下を使用できます。
Files.createDirectories(confFile.getParent());
次のことができます。
// 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()))