У меня проблемы с получением доступного места.Вскоре я пишу файл и после того, как я его удаляю, но доступное пространство остается неизменным до и после удаления.Как вы можете видеть в следующих журналах.
> 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());
Почему это пространството же самое после удаления?
ОБНОВЛЕНИЕ: Я пытался записать файл напрямую с определенным размером ... 10 МБ ...
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, который я вызывал, чтобы прекратить запись в файл определенного размера, не освобождает файл ... Я сейчас пытаюсь по этому пути проверить, удовлетворяет ли он моим требованиям ...