【发布时间】:2012-12-20 15:22:02
【问题描述】:
在我的应用中,我可以选择拍摄/选择照片、音频或视频文件。我将每个文件路径写在它自己的字符串中并用它执行一些操作。另外,我用它来确定文件大小,方法如下:
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;
taken_pic_path 100% 正确,原因有 3 个:1)。我使用相同的路径来创建预览并且它可以工作。 2)。我让通过 Toast 显示的路径,它似乎是正确的 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();
}
输出:正确的文件路径/true/true/0.0
什么鬼……
【问题讨论】:
-
分之前是0吗?
-
我被告知在上一个主题中使用双精度,否则当结果小于一时我会得到零。然后我使用一种方法将其四舍五入到小数点后两位。是的,它已经是零了。 getSize 始终返回与该路径一起使用的 0
-
小于一个?长度以字节为单位,小于 1 字节的文件似乎不太可能......
-
当然。刚拍了一张:/mnt/sdcard/DCIM/Camera/1356018878923.jpg
-
当您单步执行时,getSize() 是因为文件大小报告为零还是因为 file.exists() 返回 false 而返回零?两条路径都将返回零。顺便说一句,不需要双倍。 file.length() 返回一个长整数。