Как программно удалить файлы на Android?

Я на 4.4.2, пытаясь удалить файл (изображение) через uri. Вот мой код:

File file = new File(uri.getPath()); boolean deleted = file.delete(); if(!deleted){ boolean deleted2 = file.getCanonicalFile().delete(); if(!deleted2){ boolean deleted3 = getApplicationContext().deleteFile(file.getName()); } } 

Прямо сейчас ни одна из этих функций удаления фактически не удаляет файл. У меня также есть это в моем AndroidManifest.xml:

    

Почему бы вам не проверить это с помощью этого кода:

 File fdelete = new File(uri.getPath()); if (fdelete.exists()) { if (fdelete.delete()) { System.out.println("file Deleted :" + uri.getPath()); } else { System.out.println("file not Deleted :" + uri.getPath()); } } 

Я думаю, что часть проблемы заключается в том, что вы никогда не пытаетесь удалить файл, вы просто продолжаете создавать переменную с вызовом метода.

Поэтому в вашем случае вы можете попробовать:

 File file = new File(uri.getPath()); file.delete(); if(file.exists()){ file.getCanonicalFile().delete(); if(file.exists()){ getApplicationContext().deleteFile(file.getName()); } } 

Однако я думаю, что это немного перебор.

Вы добавили комментарий, что используете внешний каталог, а не uri. Поэтому вместо этого вы должны добавить что-то вроде:

 String root = Environment.getExternalStorageDirectory().toString(); File file = new File(root + "/images/media/2918"); 

Затем попробуйте удалить файл.

Попробуй это. Он работает для меня.

 handler.postDelayed(new Runnable() { @Override public void run() { // Set up the projection (we only need the ID) String[] projection = { MediaStore.Images.Media._ID }; // Match on the file path String selection = MediaStore.Images.Media.DATA + " = ?"; String[] selectionArgs = new String[] { imageFile.getAbsolutePath() }; // Query for the ID of the media matching the file path Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; ContentResolver contentResolver = getActivity().getContentResolver(); Cursor c = contentResolver.query(queryUri, projection, selection, selectionArgs, null); if (c.moveToFirst()) { // We found the ID. Deleting the item via the content provider will also remove the file long id = c.getLong(c.getColumnIndexOrThrow(MediaStore.Images.Media._ID)); Uri deleteUri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id); contentResolver.delete(deleteUri, null, null); } else { // File not found in media store DB } c.close(); } }, 5000); 

Я тестировал этот код на эмуляторе Nougat, и он работал:

В манифесте добавьте:

     

Создайте пустую папку xml в папке res и прошёл в provider_paths.xml:

     

Затем добавьте следующий fragment кода (например, fragment):

 File photoLcl = new File(homeDirectory + "/" + fileNameLcl); Uri imageUriLcl = FileProvider.getUriForFile(getActivity(), getActivity().getApplicationContext().getPackageName() + ".provider", photoLcl); ContentResolver contentResolver = getActivity().getContentResolver(); contentResolver.delete(imageUriLcl, null, null); 

Я вижу, вы нашли свой ответ, однако это не сработало для меня. Удалить продолжало возвращать false, поэтому я попробовал следующее и работал (для кого-то другого, для которого выбранный ответ не работал):

 System.out.println(new File(path).getAbsoluteFile().delete()); 

Очевидно, что из системы можно игнорировать, я положил ее для удобства подтверждения удаления.

  • Как выполнить итерацию свойств id classа R.java?
  • Отправляйте SMS до тех пор,
  • Отправка запроса POST-запроса JSON с Android
  • Нет доступного экземпляра типа Server.
  • Android получает значение от выбранного радиообмена
  • Код Java для преобразования байта в шестнадцатеричный
  • Как версия Java для Android относится к версии Java SE?
  • Вопрос о возврате дизайна Java try-finally
  • Как проверить, существует ли ключ json?
  • Пример кода кодирования и декодирования Base 64
  • Android Studio TransformException: ошибка: выполнение не выполнено для задачи ': app: transformClassesWithDexForDebug'
  • Давайте будем гением компьютера.