在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的)。

如果你想以KbMb的方式获取文件夹/文件大小,那么只需复制并粘贴此代码,这将有助于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); } }