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.

Schrupać
źródło

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();
Schrupać
źródło
Gdzie inputHandle.getImgPath(id)jest filePath
Pratik Butani
45

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

Konstantin Burov
źródło
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)));
Jiyeh
źródło
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 .

VikingGlen
źródło
10

Możesz także użyć: file.getCanonicalFile().delete();

mvsjes2
źródło
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ę.

Ronnie
źródło
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);
Vishakha
źródło
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

Nenad Štrbić
źródło