Удалить файл из внутреннего хранилища

96

Я пытаюсь удалить изображения, хранящиеся во внутренней памяти. Я до сих пор придумал это:

File dir = getFilesDir();
File file = new File(dir, id+".jpg");
boolean deleted = file.delete();

И это из другого вопроса, на который был дан ответ :

File dir = getFilesDir();
File file = new File(dir, "my_filename");
boolean deleted = file.delete();

Мой пример всегда возвращает false. Я вижу файл fx 2930.jpgв DDMS в eclipse.

Хруст
источник

Ответы:

139

Как- getFilesDir()то не сработало. Использование метода, который возвращает полный путь и имя файла, дало желаемый результат. Вот код:

File file = new File(inputHandle.getImgPath(id));
boolean deleted = file.delete();
Хруст
источник
Где inputHandle.getImgPath(id)находится filePath
Pratik Butani
45

Вы пробовали Context.deleteFile () ?

Константин Буров
источник
Пробовал вариант с Contex.deletFile (), который не работал. Ниже показано, что, похоже, сработало.
Crunch
@ user661543 Какой полный путь возвращает ih.getImgPath ()? Что вы передали в качестве аргумента для удаления файла? Если описанный выше метод не сработал, скорее всего, ваш файл был сохранен вне пакета приложения. Или вы могли указать неправильное имя файла в качестве аргумента.
Константин Буров
+1 Самый простой способ удалить файл, написанный черезnew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Евгений
18

Это работает для меня:

File file = new File(photoPath);
file.delete();

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
Джие
источник
14
String dir = getFilesDir().getAbsolutePath();
File f0 = new File(dir, "myFile");
boolean d0 = f0.delete(); 
Log.w("Delete Check", "File deleted: " + dir + "/myFile " + d0);

Код File dir = getFilesDir();не работает, потому что это запрос объекта File. Вы пытаетесь получить String, который объявляет путь к вашему каталогу, поэтому вам нужно объявить 'dir' как String, а затем запросить, чтобы абсолютный путь каталога в форме String был возвращен конструктором, имеющим доступ к этой информации .

ВикингГлен
источник
10

Вы также можете использовать: file.getCanonicalFile().delete();

mvsjes2
источник
3
File file = new File(getFilePath(imageUri.getValue())); 
boolean b = file.delete();

не работает в моем случае.

boolean b = file.delete();                 // returns false
boolean b = file.getAbsolutePath.delete(); // returns false 

всегда возвращает false.

Проблема была решена с помощью следующего кода:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
Вишакха
источник
Я знаю, что не могу оставить сообщение «спасибо», но .... я так тебя люблю !!!!! СПАСИБО !
Kinghomer
последний работал
Рахул Гаур
2

Вы пробовали getFilesDir().getAbsolutePath()?

Кажется, вы устранили проблему, инициализировав объект File с полным путем. Я считаю, что это тоже поможет.

Ронни
источник
0

Это старая тема, но я добавлю свой опыт, может кто-то сочтет это полезным

>     2019-11-12 20:05:50.178 27764-27764/com.strba.myapplicationx I/File: /storage/emulated/0/Android/data/com.strba.myapplicationx/files/Readings/JPEG_20191112_200550_4444350520538787768.jpg//file when it was created

2019-11-12 20:05:58.801 27764-27764/com.strba.myapplicationx I/File: content://com.strba.myapplicationx.fileprovider/my_images/JPEG_20191112_200550_4444350520538787768.jpg //same file when trying to delete it

решение1:

              Uri uriDelete=Uri.parse (adapter.getNoteAt (viewHolder.getAdapterPosition ()).getImageuri ());//getter getImageuri on my object from adapter that returns String with content uri

здесь я инициализирую преобразователь контента и удаляю его с переданным параметром этого URI

            ContentResolver contentResolver = getContentResolver ();
            contentResolver.delete (uriDelete,null ,null );

решение2 (мое первое решение - из головы в это время я это знаю): существует преобразователь контента ...

              String path = "/storage/emulated/0/Android/data/com.strba.myapplicationx/files/Readings/" +
                    adapter.getNoteAt (viewHolder.getAdapterPosition ()).getImageuri ().substring (58);

            File file = new File (path);
            if (file != null) {
                file.delete ();
            }

Надеюсь, что это поможет кому-то счастливому кодированию

Ненад Штрбич
источник