3

私のアプリには、写真、オーディオ、またはビデオファイルを撮影/選択するオプションがあります。各ファイル パスを独自の文字列で記述し、それを使用していくつかのアクションを実行します。また、次の方法でファイルサイズを決定するために使用します。

    public double getSize(String path) {

    File file = new File(path);

    if (file.exists()) {
        long size = file.length();

        return size;
    } else {
        Log.e("zero size", "the file size is zero!");
        return 0;

    }

}

正常に動作しますが、撮影した写真のサイズを取得しようとしている間、メソッドは常に 0 を返します。

   double s = 1.0 * getSize(taken_pic_path) / 1024 / 1024;

take_pic_path は 3 つの理由で 100% 正しいです: 1)。同じパスを使用してプレビューを作成すると、機能します。2)。トーストを介してパスを表示させたところ、正しいようです 3)。file.exists() でパスを確認すると、true が返されます。私も次のことを試しました:

File file = new File(taken_pic_path);
if (file.exists()){
   double test = file.lenght();
}

私は常にファイルサイズとしてゼロを取得します.同じテクニックは、撮影したビデオ、撮影したオーディオ、選択した画像/ビデオ/オーディオで完全に機能します.撮影した写真のサイズを取得しようとしているときに0しか取得しません. 理由がわかりません..何かアイデアはありますか?

編集 可能なすべてのチェックを行いました:

 if (file.exists()) {

            String b = file.getPath();
            boolean r = file.canRead();
            boolean w = file.canWrite();
            double d = file.length();
            Toast.makeText(getApplicationContext(), b, Toast.LENGTH_LONG)
                    .show();
            Toast.makeText(getApplicationContext(), Boolean.toString(r),
                    Toast.LENGTH_LONG).show();

            Toast.makeText(getApplicationContext(), Boolean.toString(w),
                    Toast.LENGTH_LONG).show();
            Toast.makeText(getApplicationContext(), Double.toString(d),
                    Toast.LENGTH_LONG).show();

        }

OUTPUT: 正しいファイル パス / true / true / 0.0 なんてこった
……

4

2 に答える 2

0

試す

double s = 1.0 * (double) getSize(taken_pic_path) / 1024.0 / 1024.0;
于 2012-12-20T18:30:17.157 に答える