Javaでプログラムを作成する際、ディレクトリ(フォルダ)を作成してファイルを格納するような流れは頻出処理の1つです。
本記事では、Javaでのディレクトリ作成方法としてFilesクラスを利用した記述法について解説していきます。
Javaでのディレクトリ作成方法
Javaでディレクトリ作成を行う際、「java.nio.file.Files」クラスを利用します。
createDirectory
「java.nio」の「Files」クラスでディレクトリを作成する場合、「createDirectory」メソッドを利用します。
Files.createDirectory(パス);
カッコ内の指定したパスにディレクトリが作成されます。
指定したディレクトリが既に存在する場合や、親ディレクトリが存在しない場合にはエラーが発生するため注意が必要です。
createDirectories
Filesクラスには似たメソッドとして「createDirectories」メソッドが提供されています。
Files.createDirectories(パス);
こちらのメソッドでは親ディレクトリを含めて指定したパスの全てのディレクトリを作成します。
Javaサンプルコードでディレクトリ作成の具体例を確認
実際にJavaのサンプルコードで、ディレクトリ作成の具体例を確認しておきましょう。
createDirectoryのサンプル
まずは現在のパスを確認してみます。
$ pwd /Applications/Eclipse_2021-12.app/Contents/workspace/sample/src/sample
上記ディレクトリの配下に「test」という新しいディレクトリを作成してみましょう。
Main.java
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { try { Path path = Paths.get("/Applications/Eclipse_2021-12.app/Contents/workspace/sample/src/sample/test"); Files.createDirectory(path); } catch (IOException ex) { System.out.println("ディレクトリ作成処理中にエラーが発生しました。"); } } }
「Main.java」ファイルが上記のパスに作成出来たら、「ls」コマンドを実行すると下記の表示となります。
$ ls Main.java
ではこの状態で「Main.java」に記述したコードを実行してみます。
$ ls Main.java test
実行してもコンソールには何も表示されませんが、同じく「ls」コマンドを実行してみると指定した「test」ディレクトリが作成されていることが確認出来ます。
コード解説
Path path = Paths.get("/Applications/Eclipse_2021-12.app/Contents/workspace/sample/src/sample/test");
10行目のコードは、ディレクトリの作成パスを「Paths」クラスのgetメソッドを利用して指定しています。
createDirectoryメソッドの引数には「Path」クラスを指定する必要があるので、10行目のような書き方で任意の場所にディレクトリを作成するよう設定します。
Files.createDirectory(path);
11行目のコードが実際にディレクトリ作成を行う処理となります。
引数には10行目で指定したパス用の変数を設定しています。
ディレクトリの作成に失敗した場合、例外が発生するため、9行目から記載しているように「try~catch」で処理を囲う必要があります。
createDirectoriesのサンプル
次にcreateDirectoriesメソッドを利用して、親ディレクトリまでまとめて作成するサンプルコードを確認してみます。
実行するパスはcreateDirectoryメソッドと全く同じ場所で試してみましょう。
$ pwd /Applications/Eclipse_2021-12.app/Contents/workspace/sample/src/sample
createDirectoriesメソッドでは、親ディレクトリを含めて作成されていることが分かるように現在のパスから「test1」「test2」「test3」と3階層分のディレクトリを指定しています。
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Main { public static void main(String[] args) { try { Path path = Paths.get("/Applications/Eclipse_2021-12.app/Contents/workspace/sample/src/sample/test1/test2/test3"); Files.createDirectories(path); } catch (IOException ex) { System.out.println("ディレクトリ作成処理中にエラーが発生しました。"); } } }
パスにはMain.javaファイルしか存在しない状態であることを確認しておきます。
$ ls Main.java
では実際にコードを実行してみましょう。
$ find . -ls 16442958 0 drwxr-xr-x 4 ユーザー名 admin 128 11 23 16:47 . 16473194 0 drwxr-xr-x 3 ユーザー名 admin 96 11 23 16:47 ./test1 16473195 0 drwxr-xr-x 3 ユーザー名 admin 96 11 23 16:47 ./test1/test2 16473196 0 drwxr-xr-x 2 ユーザー名 admin 64 11 23 16:47 ./test1/test2/test3 16442959 8 -rw-r--r-- 1 ユーザー名 admin 487 11 23 16:45 ./Main.java
出力結果を上記findコマンドで確認してみると、指定したディレクトリが親ディレクトリも含めて作成されていることが確認出来ます。
さいごに: Javaのnioでディレクトリ作成を試してみよう
本記事では、Java7より利用可能なjava.nioでのディレクトリ作成方法についてご紹介していきました。
java.ioが利用されているプロジェクトもまだまだ多いですが、新規でシステム開発を行うのであれば積極的に新しい機能を利用して、より改善されたJavaの機能を活用すべきです。
今回ご紹介した「createDirectory」と「createDirectories」メソッドを利用したディレクトリ作成も非常に分かりやすく使いやすい機能であるため、まだ利用したことのない方はしっかりと使い方を把握しておきましょう。
ファイル操作といえば「java.io.File」クラスに馴染み深い方もいらっしゃるかと思いますが、今回はJava7より追加された新しいAPI「java.nio」を活用していきます。