我有安卓应用程序,从谷歌文档下载文件到设备上的SD卡。(原因:有我无法在应用程序中打开的PDF-s )。
它成功地写入SD卡,直到我获得总共10000个文件中的第8000个文件。
写入SD的代码:
InputStream is = response.getContent();
FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/"+preferences.getString("username", "manas11")+"/" + tmp_entry.resourceID.replace(":","~_~")+"~_~"+tmp_entry.title));
byte[] buf = new byte[1024];
int len;
while((len=is.read(buf))>0)
fos.write(buf,0,len);由第2行引发的异常:
java.io.FileNotFoundException: /mnt/sdcard/matulic.realestate.hr/file~_~0B3n2EnTf5ATnYTJkNTNmM2QtZDJjYy00YjNhLWJlZjQtYTE4MTU5MjI2N2E5~_~Kuæa Marina Sevid 399.00 m2 - LJETNA AKCIJA IZVRSN - k359.txt (No space left on device)SD卡是microSD™存储卡(SD 2.0兼容),8 8gb,FAT32格式。我用的是Desire HD。
如你所见,文件名很长。我将文件保存到/mnt/sdcard/目录中,异常后的状态为(由Astro):
大小:519,668573字节
文件数: 8037
设备可用大小:4.91G
写SD有没有我不知道的限制?
谢谢
发布于 2011-07-16 22:46:09
我相信这个堆栈溢出问题会回答你的问题。
Is there a limit for the number of files in a directory on an SD card?
我自己也检查了一些信息,发现基本上归结为文件数量和文件名长度的限制。根据我在上面http://msdn.microsoft.com/en-us/windows/hardware/gg463080.aspx链接中引用的微软文档中所读到的内容,您的文件名长度有问题。
首先是文件名的长度。文件名越长,占用的空间越大。目录中有65,536个32字节的条目限制。这是因为目录文件容器的最大大小是2,097,152字节(65536*32)。但是,如果您的文件名大于8.3,则它们将占用多个条目。此外,长文件名比简单的字符总和占用更多的空间。文件系统会产生一些开销,比如创建校验和和一个简短的8.3文件名。
最好的建议是大幅缩短文件名,这应该可以解决您的问题。
希望这能有所帮助。
发布于 2011-07-16 22:35:00
这可能是FAT32的局限性。
FAT32目录可以有65,536个目录项。每个文件和子目录包含2到13个条目,这取决于其名称的长度,因此这些条目可能在您认为已用完它们之前很久就消失了。您总共有22,657个文件,可以很容易地使用65,000个条目。
来自here.
在本地存储文件时,您是否尝试过减少文件名?真的需要这么长时间吗?
https://stackoverflow.com/questions/6717787
复制相似问题