検索

キーワード


【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

  • 公開日:2021-05-02 23:31:38
  • 最終更新日:2021-05-02 23:34:14
【Java】java.nio.fileパッケージの使用例①(ファイルの作成、存在チェック)

当記事では、java.nio.fileパッケージを使った具体的な操作の一例として、Java上での以下のファイル操作について解説します。

【Java】java.nio.fileパッケージ(NIO.2)でも解説した通り、java.nio.fileパッケージは一般にjava.io.Fileクラスよりも高機能であり、多くの人にとっては使い勝手が良いものになると思います。

  • ファイル・ディレクトリの作成
  • ファイル・ディレクトリの存在チェック

java.nio.fileパッケージでのファイル操作の前提となるPathオブジェクトの詳しい生成方法については、以下を参照して下さい。

【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)

また、ファイル・ディレクトリの削除およびコピーについては、以下を参照して下さい。

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)

また、ファイル名などのディレクトリに含まれるファイルの一覧の取得、ファイルの属性の取得といったファイル操作は以下の記事で解説します。

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)

FileChannelを使ったファイルのコピーは、以下の記事で解説します。

【Java】FileChannelを使って高速にファイル入出力を行ってみた


Pathオブジェクトの作成

当記事では、java.nio.fileパッケージでのファイル操作を行う際に必要なPathオブジェクトを、java.nio.file.Pathsクラスgetメソッドで生成します。

メソッド名修飾子と型説明
get(String first, String... more) public static Pathファイルやディレクトリの場所を表すPathオブジェクトを生成します。
1つのパス文字列、または分割されたパス文字列を引数として渡しまず。


記述例は以下の通りです。

Path path = Paths.get("ファイルまたはディレクトリのパス");

Pathオブジェクトについての詳細は、以下の記事を参照して下さい。

【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)


ファイル・ディレクトリの作成

java.nio.fileパッケージでのファイル・ディレクトリの作成には、java.nio.file.FilesクラスcreateFIleメソッドcreateDirectoryメソッドを使います。


ファイル・ディレクトリを作成するメソッド

java.nio.file.FIlesクラスのうち、ファイル・ディレクトリの作成にかかわるメソッドは、主に以下が挙げられます。

可変長引数 FIleAttribute<?>... attrsは、アクセス権限などのファイル属性を表します。この詳細については、以下の記事で紹介しています。

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)


メソッド名修飾子と型説明
createFile(Path path, FIleAttribute<?>... attrs)static Path新規の空のファイルを作成します。
createDirectory(Path path, FIleAttribute<?>... attrs)
static Path新規の空のディレクトリを作成します。
createDirectories(Path path, FIleAttribute<?>... attrs)static Path親ディレクトリも含めて、新規の空のディレクトリを作成します。

createFileメソッドの記述例

Path path = Paths.get("作成したいファイルのパス");
Files.createFile(path);


createDirectoryメソッドの記述例

Path path = Paths.get("作成したいディレクトリのパス");
Files.createDirectory(path);


createDirectoriesメソッドの記述例

Path path = Paths.get("作成したいディレクトリのパス");
Files.createDirectories(path);


ファイルを作成するサンプルコード

public class createFileSample {
	public static void main(String[] args) {
		//Paths.getメソッドに作成したいファイルのパスとファイル名を渡します。
		Path filePath = Paths.get(".\\NIO\\sample1.txt");		
		try {
			//Files.createFileメソッドにPathオブジェクトを渡して、ファイルを作成します。
			Files.createFile(filePath);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


ファイルを作成するサンプルコードの実行結果

Paths.getメソッドで指定したパスに、「sample1.txt」という空のテキストファイルが生成されます。

なお、上記のコードを続けて実行すると、java.nio.file.FileAlreadyExistsExceptionという例外が返ります。これは、すでに同じパスにファイルが存在することを表す例外です。


ディレクトリを作成するサンプルコード

public class createDirectorySample {
	public static void main(String[] args) {
		//Paths.getメソッドに作成したいディレクトリのパスを渡します。
		Path dir1 = Paths.get(".\\NIO\\aa");		
		//親ディレクトリも含めて作成したいディレクトリのパスを渡します。
		Path dir2 = Paths.get(".\\NIO\\bb\\cc");		
		try {
			//ディレクトリを作成します。
			Files.createDirectory(dir1);			
			//親ディレクトリも含めてディレクトリを作成します。
			Files.createDirectories(dir2);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


ディレクトリを作成するサンプルコードの実行結果

以下の通りにディレクトリが生成されます。

createDirectoryメソッドで空のディレクトリ、createDirectoriesメソッドで親ディレクトリも含めてディレクトリが作成されることが確認できます。

ディレクトリを作成するサンプルコードの結果1

ディレクトリを作成するサンプルコードの結果2


ファイル・ディレクトリの存在チェック

ファイルやディレクトリを操作する前などに、その存在をチェックしたい場合があります。この場合は、Filesクラスexistsメソッド、またはnotExistsメソッドを使います。


ファイル・ディレクトリの存在チェックを行うメソッド

メソッド名修飾子と型説明
exists(Path path, LinkOption... options)static booleanパスに渡したファイルが存在する場合はtrue、存在しない場合はfalseを返します。
notExists(Path path, LinkOption... options)
static booleanパスに渡したファイルが存在しない場合はtrue、存在する場合はfalseを返します。

existsメソッド、notExistsメソッドの記述例

存在チェックを行いたいファイルまたはディレクトリのパスをexistメソッドまたはnotExistメソッドに渡します。

Path path = Paths.get("存在チェックを行いたいファイル、またはディレクトリのパス");
Files.exists(path);
Files.notExists(path);


ファイル・ディレクトリの存在チェックを行うサンプルコード

public class existCheckSample {
	public static void main(String[] args) {
		//存在するファイルのPathオブジェクトを作成します。
		Path existPath = Paths.get(".\\NIO\\sample1.txt");
		//存在しないファイルのPathオブジェクトを作成します。;
		Path notExistPath = Paths.get(".\\NIO\\notExist.txt");
		//存在するディレクトリを表すPathオブジェクトを作成します。
		Path dirPath = Paths.get(".\\NIO\\aa");
		//存在するファイルに対して存在チェックを行います。
		System.out.println(Files.exists(existPath));
		//存在しないファイルに対して存在チェックを行います。
		System.out.println(Files.exists(notExistPath));
		//存在するファイルに対して、存在しないことをチェックします。
		System.out.println(Files.notExists(existPath));
		//存在するディレクトリに対して存在チェックを行います。
		System.out.println(Files.exists(dirPath));
	}
}


ファイル・ディレクトリの存在チェックを行うサンプルコードの実行結果

コンソールに以下のように出力されます。

true
false
false
true


まとめ

当記事では、ファイル・ディレクトリの作成および存在チェックについて解説しました。

次のファイル・ディレクトリの削除およびコピーを紹介する記事を合わせて読むことをおすすめします。

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)


関連記事:

【Java】java.nio.fileパッケージ(NIO.2)

【Java】Pathオブジェクトを生成する方法(java.nio.fileパッケージ)

【Java】java.nio.fileパッケージの使用例②(移動・コピー、削除)

【Java】java.nio.fileパッケージの使用例③(ファイル属性の取得・変更)

【Java】java.io.Fileクラスの使い方(ファイル・ディレクトリ操作、パス、ファイル名、拡張子)

【Java】java.io.Fileクラスの使い方(ファイル一覧の取得、フィルタ)





【著者】

ゆうさい

フォワードソフト株式会社のエンジニア。経験はまだ浅いものの、Java、Python、JavaScriptなど様々な言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をするのを考えるのが好きです。 Oracle Certified Java Programmer Gold SE 11、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様