删除文件后可用空间相同

时间:2019-06-26 09:56:59

标签: java android linux file

我在检索可用空间时遇到一些问题。 不久,我正在写文件,然后删除它,但是删除前后的可用空间仍然相同。如您在以下日志中看到的。

> 2019-06-26 12:39:42.209 D/RemoveOne: before delete, space is:23220
> 2019-06-26 12:39:42.209 D/RemoveOne: before delete, file path
> /storage/emulated/0/one , exists true , file length 13599232
> 2019-06-26 12:39:42.231 D/RemoveOne: after delete, file path
> /storage/emulated/0/one, exist false, file length 0 2019-06-26
> 12:39:42.232 D/RemoveOne: after delete, space is: 23220

使用以下代码编写文件:
!!!请小心,它会创建一个文件来填充所有空间,请勿运行,否则您将知道其中的含义。 当文件达到所需数量时,我会破坏该过程。

String[] command = {
         "/system/bin/sh",
         "-c",
         "tr '\\0' '\\377' < /dev/zero | dd of=" + path + "/one" }; 
process = Runtime.getRuntime().exec(command); process.waitFor();

我尝试可用空间的方法都显示相同: 变体1:

long meg = new StatFs(Environment.getExternalStorageDirectory().getPath()).getAvailableBytes();
long megAvailable = meg / (1024 * 1024);
return megAvailable;

变种2:

StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
long bytesAvailable;
bytesAvailable = stat.getBlockSizeLong() * stat.getAvailableBlocksLong();
long megAvailable = bytesAvailable / (1024 * 1024);
return megAvailable;

用于删除的方法,结果相同: 变体1:

String path = Environment.getExternalStorageDirectory().getAbsolutePath();
final File file = new File(path + "/one");
Log.d(TAG, "before" + getFreeMemory());
Log.d(TAG, "before" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
process = Runtime.getRuntime().exec("rm " + path + "/one");
process.waitFor();
Log.d(TAG, "after" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
Log.d(TAG, "after" + getFreeMemory());

变种2:

 String path = Environment.getExternalStorageDirectory().getAbsolutePath();
 File file = new File(path + "/one");
 Log.d(TAG, "before" + getFreeMemory());
 Log.d(TAG, "before" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
 file.delete();
 Log.d(TAG, "after" + file.getAbsolutePath() + " " + file.exists() + " " + file.length());
 Log.d(TAG, "after" + getFreeMemory());

为什么删除后的空格相同?

更新: 我已经尝试过,直接以特定大小写入文件... 10MB ...

String[] command = {
           "/system/bin/sh",
           "-c",
           "tr '\\0' '\\377' < /dev/zero | dd of=" + path + "/one bs=1 
           count=10000000"
 };
process = Runtime.getRuntime().exec(command);
process.waitFor();

在删除之后,可以正确识别空格。 因此,我相信onDestroy方法(我正在调用该方法停止以特定大小写入文件)不会释放文件... 我现在正在尝试这条路,看看它是否符合我的要求...

0 个答案:

没有答案