检测内部存储器?

时间:2012-02-28 05:16:17

标签: android filesystems android-sdcard

我正在开发一个应用程序,它将文件从SD卡移动到内部存储器。我需要的是:

1.检测要移动的文件的大小。

2.检测内部存储空闲内存的大小。

3.比较两者?

只要空闲内存小于文件大小,这就会发出警报。 我怎么能做前两点。如果有人在处理类似的问题吗?

2 个答案:

答案 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)

  1. long file_size = file.length();

  2. File data_path = Environment.getDataDirectory(); StatFs stat = new StatFs(data_path.getPath()); long free_internal_memory = stat.getBlockSize() * stat.getAvailableBlocks();