1.Filesクラス

ファイルクラス

ファイルを操作するには、洗練されたユーティリティ クラスがあります — java.nio.file.Files。あらゆる場面に応じたメソッドが用意されています。このクラスのすべてのメソッドは静的であり、Path オブジェクトに対して動作します。たくさんの方法があるので、最も重要なものだけを取り上げます。

方法 説明
Path createFile(Path path)
パスが次のような新しいファイルを作成します。path
Path createDirectory(Path path)
新しいディレクトリを作成します
Path createDirectories(Path path)
複数のディレクトリを作成します
Path createTempFile(prefix, suffix)
一時ファイルを作成します
Path createTempDirectory(prefix)
一時ディレクトリを作成します
void delete(Path path)
ファイルまたはディレクトリが空の場合は削除します
Path copy(Path src, Path dest)
ファイルをコピーします
Path move(Path src, Path dest)
ファイルを移動します
boolean isDirectory(Path path)
パスがファイルではなくディレクトリであるかどうかを確認します
boolean isRegularFile(Path path)
パスがディレクトリではなくファイルであるかどうかを確認します
boolean exists(Path path)
指定されたパスにオブジェクトが存在するかどうかを確認します
long size(Path path)
ファイルサイズを返します
byte[] readAllBytes(Path path)
ファイルの内容全体をバイト配列として返します。
String readString(Path path)
ファイルの内容全体を文字列として返します。
List<String> readAllLines(Path path)
ファイルの内容全体を文字列のリストとして返します。
Path write(Path path, byte[])
バイト配列をファイルに書き込みます
Path writeString(Path path, String str)
文字列をファイルに書き込みます
DirectoryStream<Path> newDirectoryStream(Path dir)
指定されたディレクトリからファイル (およびサブディレクトリ) のコレクションを返します。

2. ファイルとディレクトリの作成

ファイルとディレクトリは非常に簡単に作成できます。いくつかの例を挙げて納得してみましょう。

コード ノート
Files.createFile(Path.of("c:\\readme.txt"));
ファイルを作成します
Files.createDirectory(Path.of("c:\\test"));
ディレクトリを作成します
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
ディレクトリと必要なすべてのサブディレクトリが存在しない場合は作成します。

3. コピー、移動、削除

ファイルのコピー、移動、削除も同様に簡単です。これはディレクトリにも当てはまりますが、ディレクトリは空である必要があります。

コード ノート
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
ファイルをコピーします
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
ファイルの移動と名前変更
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
ファイルを削除します

4. ファイルの種類と存在の確認

他の人から提供されたパスがある場合、それがファイルなのかディレクトリなのかを知りたくなるでしょう。そして一般に、そのようなファイル/ディレクトリは存在するのでしょうか?

これにも特別な方法があります。ファイルの長さを簡単に調べることもできます。

コード ノート
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. ファイルの内容の操作

最後に、ファイルの内容の読み取りまたは書き込みを簡単にする一連のメソッドがあります。例:

コード 説明
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

ファイルの内容を文字列のリストとして読み取ります。

文字列を表示する


6. ディレクトリの内容を取得する

最も興味深い方法がまだ残っています。指定されたディレクトリ内のファイルとサブディレクトリを取得するために使用されます。

newDirectoryStream()特別なオブジェクトを返すメソッドについて話していますDirectoryStream<Path>。これには、指定されたディレクトリのすべてのファイルとサブディレクトリを取得するために使用できるイテレータ (!) があります。

これは思ったよりも簡単です。

コード 説明
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


ファイルのリストを含むオブジェクトを取得する
ファイルのリストをループする

オブジェクトDirectoryStream<Path>には 2 つのプロパティがあります。まず、ファイル パスを返すイテレータがあり、for-eachループ内でこのオブジェクトを使用できます。

次に、このオブジェクトはデータ ストリームであるため、close()メソッドを使用して明示的に閉じるか、try-with-resourcesブロック内で使用を宣言する必要があります。



7.Files.newInputStream方法

Java 5 以降、FileInputStreamおよびFileOutputStreamクラスは非推奨になりました。欠点の 1 つは、これらのクラスのオブジェクトが作成されると、すぐにディスク上にファイルが作成されてしまうことでした。また、ファイル作成に関連するすべての例外がスローされる可能性があります。

後に、これは最善の決定ではないと認識されました。したがって、ファイル オブジェクトの作成にはユーティリティ クラスのメソッドを使用することをお勧めしますjava.nio.Files

ファイルを作成するための古いアプローチと新しいアプローチの比較は次のとおりです。

String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

そして、同様の置き換えがありますFileOutputStream:

String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );