Я работаю над приложением, в котором перечислены все аудиофайлы из общего внутреннего хранилища и съемной SD-карты. Теперь, если пользователь хочет удалить определенный файл, он будет удален из общего внутреннего хранилища или съемной SD-карты.
Проблема, с которой я столкнулся, заключается в том, что file.delete не работает, я использовал mediastore для получения всех аудиофайлов.
Это были пути к аудиофайлам, которые я получил из медиа-магазина.
Это из внутреннего общего хранилища.
/storage/emulated/0/Music/Guitar1.mp3
Это со съемной карты micro SD.
/storage/BBF8-A8D3/Guitar1.mp3
После получения этих путей
File deleteFile = new File(s.getFilepath());
boolean delete = deleteFile.delete();
Удаление дает false
, так как файл удаления не удаляется.
Теперь я попробовал это,
File deleteFile = new File(s.getFilepath());
if(deleteFile.exists()) {
boolean catchdelete = deleteFile.delete();}
Теперь, после создания файла из пути, если условие не выполняется, поскольку файл удаления не существует.
Итак, почему вновь созданный файл не существует (файл не является каталогом), требуется ли поток ввода файла.
Моя основная проблема - удалить файл из хранилища через приложение.
Это мой метод получения путей к аудиофайлам.
public ArrayList<String> getAudiosPath(Activity activity, Context context) {
// Uri uri;
listOfAllAudios = new ArrayList<String>();
Cursor cursor;
final String[] columns = {MediaStore.Audio.Media.DATA, MediaStore.Audio.Media._ID};
final String orderBy = MediaStore.Audio.Media._ID;
//Stores all the audio from the gallery in Cursor
cursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, columns, null,
null, orderBy);
//Total number of audios
int count = cursor.getCount();
//Create an array to store path to all the audios
String[] arrPath = new String[count];
for (int i = 0; i < count; i++) {
cursor.moveToPosition(i);
int dataColumnIndex = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
//Store the path of the audio
arrPath[i] = cursor.getString(dataColumnIndex);
Bitmap b = ((BitmapDrawable) ResourcesCompat.getDrawable(context.getResources(), R.drawable.headphone512, null)).getBitmap();
bitmap.add(b);
Log.i("PATH", arrPath[i]);
listOfAllAudios.add(arrPath[i]);
}
// count_paths=listOfAllAudios.size();
return listOfAllAudios;
}
Теперь я применил утилиты Apache Commons IO File Utils.
File deleteFile = new File(s.getFilepath());
// boolean delete = deleteFile.delete();
try {
FileUtils.forceDelete(FileUtils.getFile(s.getFilepath()));
}
catch (IOException e) {
e.printStackTrace();
}
Эта файловая утилита Apache Commons действительно удаляет файл, но проблема заключается в том, что при повторном открытии приложения я вижу путь к файлу с размером файла 0 КБ.
В ящике загрузки навигации
когда в ящике навигации я получаю доступ к TA-1032-> Музыка -> Пусто (файл отсутствует) (файл отсутствует, что означает, что файл удаляется)
Но в ящике Nav я получаю доступ к Audio-> Unknown -> Music -> Guitar.mp3 (файл присутствует, но размер файла равен 0 и не может быть воспроизведен)
так что это как-то получить путь к файлу.