Я много гуглил и искал здесь, в StackOverflow, ответ на мой вопрос. Я видел много сообщений о рекурсивном методе удаления файлов (, например , , и , ), но ни один из них работал на меня. Я использую этот метод, чтобы найти мою SD-карту (которая /storage/0000-0000
).
private void wipeSDCards() {
File storage = new File("/storage");
File[] storageSubDirs = storage.listFiles();
for (File storageSubDir : storageSubDirs) {
try {
boolean storageSubDirIsEmulated = Environment.isExternalStorageEmulated(storageSubDir);
boolean storageSubDirIsRemovable = Environment.isExternalStorageRemovable(storageSubDir);
if (!storageSubDirIsEmulated && storageSubDirIsRemovable) {
deleteStuff(storageSubDir);
}
} catch (IllegalArgumentException iae) {
LoggingUtil.i(MyClass.class, String.format(Locale.US, "FAILED ON: %s", storageSubDir.getAbsolutePath()));
}
}
}
private void deleteStuff(File fileOrDirectory) {
// things I have tried ....
}
Чтобы удалить файлы на SD-карте, я попытался:
File fileToDelete = new File('path.to.file');
fileToDelete.delete();
Но это не работает Я пытался:
Files.delete(fileToDelete.toPath());
Но это не работает. Я пытался:
application.getContentResolver().delete(uri, null, null);
Но это тоже не работает. Я поместил это заявление для печати перед всеми моими попытками удаления:
Log.e("LOOK HERE: ", String.format(Locale.US, "Your Application %s delete this file (%s)", (fileOrDirectory.canWrite() ? "can" : "can NOT"), fileOrDirectory.getName()));
И всегда получал обратно Your Application can NOT delete this file (path.to.file)
. Кажется, у меня нет разрешения на удаление файлов на SD-карте, хотя я могу это сделать через файловый браузер Windows.
Итак, разрешено ли приложению удалять содержимое SD-карты? Если да, то как же go сделать это? Как насчет способа просто отформатировать SD-карту, я бы тоже это взял.
Кроме того, пожалуйста, не спрашивайте "почему вы хотите это сделать" ... Я просто делаю.