在android sdk获取文件大小?
我有一个问题得到一个文件的大小。 我有以下代码:
File file = new File("/sdcard/lala.txt"); long length = file.length();
总是长度为零,是零。
我正在使用Android SDK(不知道是什么版本),代码运行在一个活动,我已经创build了一个SD卡。
也许这是一个许可问题? 有什么我失踪?
File.length()
方法根据javadoc返回以下内容:
“以这个抽象path名表示的文件的长度(以字节为单位),或者如果文件不存在,则为0L。某些操作系统可能返回0L,表示与系统相关的实体(如设备或pipe道)的path名。
正如你所看到的,零可以被返回:
- 如果文件存在但包含零字节。
- 如果文件不存在或者
- 如果该文件是一些操作系统特定的特殊文件。
我的钱是在第二个案件; 即你有错误的文件名/path名。 尝试调用文件名File.exists()
来查看告诉你什么。 另外两种情况也是可能的,我想。
(据记载,基于Linux的系统上的大多数/proc/...
文件也有一个明显的文件大小为零,而Android是基于Linux的)。
如果你想以Kb或Mb的方式获取文件夹/文件大小,那么只需复制并粘贴此代码,这将有助于find文件的准确大小。
String value=null; long Filesize=getFolderSize(file)/1024;//call function and convert bytes into Kb if(Filesize>=1024) value=Filesize/1024+" Mb"; else value=Filesize+" Kb"; showToast("Your File size is "+value);
**This function will return size in form of bytes**
public static long getFolderSize(File f) { long size = 0; if (f.isDirectory()) { for (File file : f.listFiles()) { size += getFolderSize(file); } } else { size=f.length(); } return size; }
你应该使用:
File file=new File(Uri.parse("/sdcard/lala.txt").getPath());
代替
File file=new File(uri.toString());
Perfeitasolução。
Coloquei um GUID para direfenciar o arquivo e / 1024。
// Codigo Abaixo。
long valueSize = downloadManager.getFile(apoio.getGuid() + "_" + apoio.getNomeArquivo()).length()/1024; String tamanhoFile = ""; if(valueSize >= 1024) { tamanhoFile = valueSize / 1024 + "MB"; }else { tamanhoFile = valueSize + "KB"; } if(tamanhoFile.equals(apoio.getTamanhoArquivo())){ downloadManager.openFile(apoio.getUrl(), downloadManager.getFile(apoio.getGuid() + "_" + apoio.getNomeArquivo())); }else{ downloadManager.deleteFile(downloadManager.getFile(apoio.getGuid() + "_" + apoio.getNomeArquivo())); onDownload(holder, apoio); } }