Видаліть файл із внутрішньої пам’яті


95

Я намагаюся видалити зображення, що зберігаються у внутрішній пам’яті. Я до цього придумав:

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
Пратік Бутані

45

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


Спробував варіант із Contex.deletFile (), який не спрацював. Нижче - те, що, здавалося, працювало.
Crunch,

@ user661543 Який повний шлях повертає ih.getImgPath ()? Що ви передали як аргумент для видалення файлу? Якщо вищевказаний метод не спрацював, швидше за все, ваш файл зберігався поза пакетом програми. Або, можливо, ви передали неправильну назву файлу як аргумент.
Костянтин Буров

+1 Найпростіший спосіб видалити файл, написаний черезnew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

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. Ви намагаєтесь отримати рядок, який оголошує шлях до вашого каталогу, тому вам потрібно оголосити 'dir' як рядок, а потім вимагати, щоб конструктор, який має доступ до цієї інформації, повернув абсолютний шлях до каталогу у формі String. .


10

Ви також можете використовувати: file.getCanonicalFile().delete();


2

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

Здається, ви вирішили проблему, ініціалізувавши об’єкт File із повним шляхом. Я вважаю, що це також зробить трюк.


1
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);

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 );

solution2 (моє перше рішення від керівника за цей час, я це знаю): вирішувач вмісту існує ...

              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 ();
            }

Сподіваюся, що це буде корисно для когось щасливого кодування

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.