talosのプログラミング教室

Java Gold合格への道 ~Java I/O・Filesクラス~

スポンサーリンク

こんにちは。たろすです。

今回はJava I/OのFilesクラスについて説明します。

FileクラスとFilesクラスの違い

FileクラスではFileオブジェクトを生成し、メソッドを呼ぶことでファイル操作をしていました。

一方でFilesクラスはstaticメソッドのみで、引数にPathオブジェクトをとることでファイル操作します。

Filesクラスの主なメソッド

try {
	// ファイルのコピー
	System.out.println("filesディレクトリの中身(コピー前):");
	Files.list(Paths.get("files")).forEach(System.out::println);
	System.out.println();
	Files.copy(Paths.get("files/text.txt"), Paths.get("files/text2.txt"));
	System.out.println("filesディレクトリの中身(コピー後):");
	Files.list(Paths.get("files")).forEach(System.out::println);
	System.out.println();

	// ファイルの移動
	System.out.println("tmpディレクトリの中身(移動前):");
	Files.list(Paths.get("files/tmp")).forEach(System.out::println);
	System.out.println();
	Files.move(Paths.get("files/text2.txt"), Paths.get("files/tmp/text2.txt"));
	System.out.println("filesディレクトリの中身(移動後):");
	Files.list(Paths.get("files")).forEach(System.out::println);
	System.out.println();
	System.out.println("tmpディレクトリの中身(移動後):");
	Files.list(Paths.get("files/tmp")).forEach(System.out::println);
	System.out.println();

	// 属性の確認
	System.out.println("最終更新日時:" + Files.getAttribute(Paths.get("files/text.txt"), "lastModifiedTime"));
	System.out.println("最終アクセス日時:" + Files.getAttribute(Paths.get("files/text.txt"), "lastAccessTime"));
	System.out.println("作成日時:" + Files.getAttribute(Paths.get("files/text.txt"), "creationTime"));
	System.out.println("サイズ:" + Files.getAttribute(Paths.get("files/text.txt"), "size"));
} catch (IOException e) {
	e.printStackTrace();
}
filesディレクトリの中身(コピー前):
files\text.txt
files\tmp

filesディレクトリの中身(コピー後):
files\text.txt
files\text2.txt
files\tmp

tmpディレクトリの中身(移動前):

filesディレクトリの中身(移動後):
files\text.txt
files\tmp

tmpディレクトリの中身(移動後):
files\tmp\text2.txt

最終更新日時:2022-02-01T09:12:38.929466Z
最終アクセス日時:2022-02-19T09:47:20.39287Z
作成日時:2022-02-01T08:01:59.585525Z
サイズ:11

list

ディレクトリ内のファイル、ディレクトリの一覧をStream<Path>オブジェクトとして返します。

copy

ファイルやディレクトリをコピーします。

第一引数はコピー元のパス、第二引数はコピー先のパスです。

第三引数は以下を設定することができます。

LinkeOption.NOFOLLOW_LINKS:シンボリック・リンクをだとらない。

StandardCopyOption.COPY_ATTRIBUTES:ファイル属性をコピーする。

StandardCopyOption.REPLACE_EXISTING:コピー先にコピー元が存在する場合は置換する。

ディレクトリをコピーする場合は中身はコピーされないので注意しましょう。

move

ファイルやディレクトリを移動します。

第一引数はコピー元のパスで、第二引数はコピー先のパスです。

第三引数はcopyと同じ列挙定数を指定できます。

getAttribute

ファイルやディレクトリの属性を取得します。

第一引数にファイルのパス、第二引数に取得する属性の名前(文字列)を指定します。

第二引数に指定できる属性名はコード中ででてきたものの他にisRegularFile、isDirectory、isSymbolickLink、isOther、fileKeyがあります。

第三引数には以下の列挙定数を指定することができます。

LinkeOption.NOFOLLOW_LINKS:シンボリック・リンクをだとらない。

おわりに

今回はJava I/OのFilesクラスについて説明しました。