web-dev-qa-db-ja.com

Android sdk?

ファイルのサイズの取得に問題があります。私は次のコードを持っています:

File file = new File("/sdcard/lala.txt");
long length = file.length();

そして、長さは常にゼロ、はいゼロです。

Android SDK(どのバージョンかわからない))を使用しています。コードはアクティビティ内で実行されています。SDカードを作成しました。

おそらく許可の問題ですか?不足しているものはありますか?

70
chinanzio

File.length()メソッドは以下を返します javadocによると

"この抽象パス名で示されるファイルのバイト単位の長さ、またはファイルが存在しない場合は0L。一部のオペレーティングシステムは、デバイスなどのシステム依存エンティティを示すパス名に対して0Lを返す場合があります。またはパイプ。」

ご覧のとおり、ゼロが返されます。

  • ファイルは存在するが、ゼロバイトが含まれている場合。
  • ファイルが存在しない場合、または
  • ファイルがOS固有の特殊ファイルである場合。

私のお金は2番目のケースです。つまり、ファイル名/パス名が間違っているということです。ファイル名でFile.exists()を呼び出して、その内容を確認してください。他の2つのケースも可能だと思います。

(記録のために、Linuxベースのシステム上のほとんどの/proc/...ファイルも見かけのファイルサイズがゼロです。そしてAndroidはLinuxベースです。)

89
Stephen C

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;
}   
25
Pir Fahim Shah

以下を使用する必要があります。

File file = new File(Uri.parse("/sdcard/lala.txt").getPath());

の代わりに:

File file = new File("/sdcard/lala.txt");
4
KAMAL VERMA

パス( "/sdcard/lala.txt")をハードコーディングする代わりに、次のコードを使用することをお勧めします。

File file = new File(Environment.getExternalStorageDirectory().getPath() + "/lala.txt");
file.length()
2
Karthik