Java File length() メソッド
File.length()は Java のjava.io.Fileクラスの一般的なメソッドで、ファイルのサイズ(バイト単位)を取得するために使用されます。このメソッドはlong型の値を返し、指定されたファイルのバイト長を表します。
メソッド構文
public long length()
戻り値
ファイルのサイズ(バイト単位)を返します。ファイルが存在しない場合やディレクトリの場合は 0 を返します。0L。
使用シーン
length()このメソッドは、以下の場合に特に役立ちます:
- ファイルサイズが要件を満たしているか確認する
- ファイルサイズの変化を監視する
- ディスク容量の使用状況を計算する
- ファイルのアップロード/ダウンロード時に進捗状況を表示する
基本的な使用例
例1:ファイルサイズの取得
例
import java.io.File;
public class FileLengthExample {
public static void main(String[] args) {
File file = new File("example.txt");
if (file.exists()) {
long fileSize = file.length();
System.out.println(ファイルサイズ: + fileSize + バイト);
} else {
System.out.println(ファイルが存在しません);
}
}
}
public class FileLengthExample {
public static void main(String[] args) {
File file = new File("example.txt");
if (file.exists()) {
long fileSize = file.length();
System.out.println(ファイルサイズ: + fileSize + バイト);
} else {
System.out.println(ファイルが存在しません);
}
}
}
コードの説明
- を作成し、
Fileオブジェクトが対象ファイルを指します - ファイルが存在するか確認します
- 存在する場合は、
length()メソッドを呼び出してファイルサイズを取得します - ファイルサイズ情報を出力します
注意事項
1. ファイルが存在しない場合
ファイルが存在しない場合、length()メソッドが返すのは0であり、例外はスローされません。したがって、呼び出し前にファイルが存在するか確認することをお勧めします:
例
if (file.exists()) {
long size = file.length();
// ファイルサイズの処理
} else {
// ファイルが存在しない場合の処理ロジック
}
long size = file.length();
// ファイルサイズの処理
} else {
// ファイルが存在しない場合の処理ロジック
}
2. ディレクトリの場合
ディレクトリの場合、length()メソッドが返すのも0です。ディレクトリのサイズを取得する必要がある場合は、ディレクトリ内のすべてのファイルのサイズを再帰的に計算する必要があります。
3. シンボリックリンク
ファイルがシンボリックリンクの場合、length()リンクが指す実際のファイルのサイズが返されます。
4. 大容量ファイルの処理
そのため、length()が返すのはlong型であり、最大 2^63-1 バイト(約 8EB)のファイルを処理でき、ほとんどの場面で十分です。
高度な使い方
例2:ファイルサイズのフォーマット
例
import java.io.File;
public class FileSizeFormatter {
public static void main(String[] args) {
File file = new File("largefile.zip");
long size = file.length();
System.out.println(元のサイズ: + size + バイト);
System.out.println(フォーマット後のサイズ: + formatFileSize(size));
}
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);
}
}
public class FileSizeFormatter {
public static void main(String[] args) {
File file = new File("largefile.zip");
long size = file.length();
System.out.println(元のサイズ: + size + バイト);
System.out.println(フォーマット後のサイズ: + formatFileSize(size));
}
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);
}
}
出力例
原始大小: 1500000 字节 格式化大小: 1.4 MB
パフォーマンスの考慮事項
File.length()メソッドの呼び出しは軽量です。ファイルの内容を実際に読み取るのではなく、ファイルシステムのメタデータを照会するだけだからです。ただし、以下の場合は注意が必要です:
- ネットワークファイルシステム:リモートファイルシステムのメタデータへのアクセスには遅延が発生する可能性があります
- 頻繁な呼び出し:ファイルサイズを頻繁に取得する必要がある場合は、結果のキャッシュを検討してください
- リアルタイム監視:ファイルサイズの変化をリアルタイムで監視するシナリオでは、
WatchServiceと組み合わせて使用する必要があるかもしれません。
よくある質問
Q1: ディレクトリに対して length() を呼び出すと 0 が返るのはなぜですか?
A: ほとんどのファイルシステムでは、ディレクトリ自体はストレージ領域を消費しません(または固定の小さな領域を消費します)。`length()` メソッドはディレクトリに対して 0 を返すように設計されています。Q2: length() メソッドはブロックしますか?
A: 通常はブロックしません。ただし、ネットワークファイルシステムにアクセスしていてネットワークの状態が良くない場合は除きます。Q3: ディレクトリの合計サイズを取得するにはどうすればよいですか?
A: ディレクトリ内のすべてのファイルを再帰的に走査し、それらの `length()` 値を合計する必要があります。まとめ
File.length()はシンプルですが実用的なメソッドで、ファイルサイズ情報を取得するために使用されます。使用時には、ファイルが存在するか、ディレクトリであるかなどのエッジケースに注意する必要があります。他のファイル操作メソッドと組み合わせることで、強力なファイル処理機能を構築できます。
Java File