ファイルのサイズの取得に問題があります。私は次のコードを持っています:
File file = new File("/sdcard/lala.txt");
long length = file.length();
そして、長さは常にゼロ、はいゼロです。
Android SDK(どのバージョンかわからない))を使用しています。コードはアクティビティ内で実行されています。SDカードを作成しました。
おそらく許可の問題ですか?不足しているものはありますか?
File.length()
メソッドは以下を返します javadocによると :
"この抽象パス名で示されるファイルのバイト単位の長さ、またはファイルが存在しない場合は0L。一部のオペレーティングシステムは、デバイスなどのシステム依存エンティティを示すパス名に対して0Lを返す場合があります。またはパイプ。」
ご覧のとおり、ゼロが返されます。
私のお金は2番目のケースです。つまり、ファイル名/パス名が間違っているということです。ファイル名でFile.exists()
を呼び出して、その内容を確認してください。他の2つのケースも可能だと思います。
(記録のために、Linuxベースのシステム上のほとんどの/proc/...
ファイルも見かけのファイルサイズがゼロです。そしてAndroidはLinuxベースです。)
KbまたはMbでフォルダー/ファイルサイズを取得する場合は、次のコードを使用します。ファイルの正確なサイズを見つけるのに役立ちます。
public static String getFolderSizeLabel(File file) {
long size = getFolderSize(file) / 1024; // Get size and convert bytes into Kb.
if (size >= 1024) {
return (size / 1024) + " Mb";
} else {
return size + " Kb";
}
}
この関数は、バイトの形式でサイズを返します。
public static long getFolderSize(File file) {
long size = 0;
if (file.isDirectory()) {
for (File child : file.listFiles()) {
size += getFolderSize(child);
}
} else {
size = file.length();
}
return size;
}
以下を使用する必要があります。
File file = new File(Uri.parse("/sdcard/lala.txt").getPath());
の代わりに:
File file = new File("/sdcard/lala.txt");
パス( "/sdcard/lala.txt")をハードコーディングする代わりに、次のコードを使用することをお勧めします。
File file = new File(Environment.getExternalStorageDirectory().getPath() + "/lala.txt");
file.length()