我正在开发一个应用程序,它将文件从SD卡移动到内部存储器。我需要的是:
1.检测要移动的文件的大小。
2.检测内部存储空闲内存的大小。
3.比较两者?
只要空闲内存小于文件大小,这就会发出警报。 我怎么能做前两点。如果有人在处理类似的问题吗?
答案 0 :(得分:1)
我已经做了类似的事情,但后来又为目录中的多个(音乐)文件,以及系统可用的任何挂载点。我不是100%确定下面的解释适用于内部存储,但至少应该给你一些有用的指示。
您可以通过调用.length()
来轻松获取文件的大小:
long fileSize = someFile.length();
请注意,如果someFile
实际上是一个目录,则不会定义结果。因此,要获取目录的大小,请遍历其所有子项(当然,它们可能会再次包含目录)。
为了检索有关文件系统空间的信息,我使用了statFs
类,它只是statfs()
的Java包装器。计算可用空间是一个简单的乘法:
// 'fromFreeBytes' is the source file/directory size
StatFs toDirStats = new StatFs(mToDir.getAbsolutePath());
long toFreeBytes = ((long)toDirStats.getAvailableBlocks() * (long)toDirStats.getBlockSize());
if (toFreeBytes < fromFreeBytes) {
//insufficient available space
}
最后,重要的是要记住,如果您要在不同的挂载点之间移动文件,则不能使用File的renameTo(...)
方法。相反,您必须使用InputStream和OutputStream来复制数据。
答案 1 :(得分:1)
long file_size = file.length();
File data_path = Environment.getDataDirectory();
StatFs stat = new StatFs(data_path.getPath());
long free_internal_memory = stat.getBlockSize() * stat.getAvailableBlocks();