Usuń plik z pamięci wewnętrznej


95

Próbuję usunąć obrazy zapisane w pamięci wewnętrznej. Do tej pory wymyśliłem to:

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

A to z innego pytania, na które odpowiedziano :

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

Mój przykład zawsze zwraca fałsz. Widzę plik fx 2930.jpgw DDMS w eclipse.

Odpowiedzi:


139

getFilesDir()Jakoś nie działa. Użycie metody, która zwraca całą ścieżkę i nazwę pliku, dało pożądany rezultat. Oto kod:

File file = new File(inputHandle.getImgPath(id));
boolean deleted = file.delete();

Gdzie inputHandle.getImgPath(id)jest filePath
Pratik Butani

45

Czy próbowałeś Context.deleteFile () ?


Wypróbowano wariant z Contex.deletFile (), który nie działał. Poniżej znajduje się to, co wydawało się działać.
Crunch

@ user661543 Jaka jest pełna ścieżka zwrócona przez ih.getImgPath ()? Co podałeś jako argument do usunięcia pliku? Jeśli powyższa metoda nie zadziałała, najprawdopodobniej plik został zapisany poza pakietem aplikacji. Lub mogłeś przekazać błędną nazwę pliku jako argument.
Konstantin Burov

+1 Najprostszy sposób na usunięcie pliku zapisanego przeznew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

To działa dla mnie:

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

Kod File dir = getFilesDir();nie działa, ponieważ jest to żądanie dotyczące obiektu File. Próbujesz pobrać String, który deklaruje ścieżkę do twojego katalogu, więc musisz zadeklarować 'dir' jako String, a następnie zażądać, aby ścieżka bezwzględna katalogu w postaci String została zwrócona przez konstruktora, który ma dostęp do tych informacji .



2

Czy próbowałeś getFilesDir().getAbsolutePath()?

Wygląda na to, że problem został rozwiązany poprzez zainicjowanie obiektu File z pełną ścieżką. Wierzę, że to też by załatwiło sprawę.


2
File file = new File(getFilePath(imageUri.getValue())); 
boolean b = file.delete();

nie działa w moim przypadku.

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

zawsze zwraca fałsz.

Problem został rozwiązany za pomocą poniższego kodu:

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

Wiem, że nie mogłem zostawić wiadomości „dziękuję”, ale .... tak bardzo cię kocham !!!!! DZIĘKI !
Kinghomer

0

To stary temat, ale dodam swoje doświadczenie, może komuś to pomoże

>     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

rozwiązanie1:

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

tutaj inicjalizuję program rozpoznawania treści i usuwam go z przekazanym parametrem tego URI

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

rozwiązanie2 (moje pierwsze rozwiązanie z głowy w tym czasie wiem, że): resolver treści istnieje ...

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

Mam nadzieję, że będzie to pomocne dla kogoś, kto będzie zadowolony z kodowania

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.