Java java.nio.file.Files size() メソッド
java.nio.file.Files.size()Java NIO (New I/O) パッケージ内の非常に実用的な静的メソッドであり、指定されたファイルのサイズ(バイト単位)を取得するために使用されます。このメソッドはjava.nio.fileパッケージに属し、Java 7 で導入されたファイル操作 API の一部です。
メソッド定義
メソッドパラメータ
Path path
- 型:
java.nio.file.Path - 説明: サイズを取得する対象のファイルパスオブジェクト
- 注意:
- 実際に存在するファイルを指している必要があります
- ディレクトリにすることはできません(その場合、例外がスローされます)
- パスは絶対パスでも相対パスでも構いません
戻り値
long 型
- 意味: ファイルのサイズをバイト単位で返します
- 特徴:
- ファイルが空の場合は 0 を返します
- 大きなファイルの場合、戻り値が ... を超える可能性があります
Integer.MAX_VALUE
例外処理
size()このメソッドは以下の例外をスローする可能性があります:
IOException
- 発生条件:
- ファイルが存在しない
- ファイルを読み取る権限がない
- 入出力エラーが発生
- パスがファイルではなくディレクトリを指している
SecurityException
- 発生条件: セキュリティマネージャーが存在し、ファイルへのアクセスを拒否した場合
使用例
基本的な使い方
サンプル
import java.io.IOException;
public class FileSizeExample {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
long fileSize = Files.size(filePath);
System.out.println("File size: " + fileSize + " bytes");
} catch (IOException e) {
System.err.println("Error getting file size: " + e.getMessage());
}
}
}
大ファイルの処理
サンプル
public static String formatFileSize(long size) {
if (size < 1024) return size + " B";
int exp = (int) (Math.log(size) / Math.log(1024));
char unit = "KMGTPE".charAt(exp-1);
return String.format("%.1f %sB", size / Math.pow(1024, exp), unit);
}
注意事項
パフォーマンスに関する考慮事項:
- ローカルファイルシステムの場合、
size()操作は通常非常に高速です - ネットワークファイルシステムの場合は、遅延が発生する可能性があります
- ローカルファイルシステムの場合、
シンボリックリンク:
- パスがシンボリックリンクの場合、リンク先の実際のファイルサイズを返します
ファイルロック:
- メソッド実行中はファイルがロックされないため、取得直後にファイルサイズが変更される可能性があります
代替手段:
- 古いバージョンの Java では、... を使用できます
java.io.File.length()
- 古いバージョンの Java では、... を使用できます
実際の適用シナリオ
ファイルアップロード前のチェック:
サンプル
if (Files.size(filePath) > MAX_UPLOAD_SIZE) {
throw new FileTooLargeException();
}
ディスク容量管理:
サンプル
long totalSize = Files.walk(dirPath)
.filter(Files::isRegularFile)
.mapToLong(Files::size)
.sum();
進捗表示:
サンプル
long totalBytes = Files.size(sourcePath);
long copiedBytes = 0;
// ...コピーループ内で進捗率を更新して表示...
よくある質問(FAQ)
Q1: size() メソッドはディレクトリに使用できますか?
いいえ、パスがディレクトリを指す場合は、... がスローされますIOException。ディレクトリのサイズを取得するには、... を使用する必要がありますFiles.walk()ディレクトリの内容を走査し、ファイルサイズを累計します。
Q2: このメソッドはブロックしますか?
ローカルファイルシステムでは通常ブロックしませんが、ネットワークファイルシステムでは遅延が発生する可能性があります。
Q3: 戻り値が int ではなく long なのはなぜですか?
一部のファイルは 2GB(Integer.MAX_VALUE)を超える可能性があるため、long を使用すると超大ファイルをサポートできます。
Q4: このメソッドと File.length() の違いは何ですか?
Files.size()NIO.2 API の一部であり、シンボリックリンクなど、より多くの最新ファイルシステム機能をサポートしています。一方、File.length()は従来の I/O のメソッドです。
まとめ
java.nio.file.Files.size()このメソッドは、ファイルサイズを取得するためのシンプルかつ効果的な方法を提供し、ファイル操作でよく使用されるユーティリティメソッドです。その使用法と潜在的な例外を理解することは、堅牢なファイル処理コードを作成するために非常に重要です。
Java java.nio.file.Files