Hapus file dari penyimpanan internal

95

Saya mencoba menghapus gambar yang disimpan di penyimpanan internal. Saya telah menemukan ini sejauh ini:

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

Dan ini dari pertanyaan lain, yang dijawab dengan :

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

Contoh saya selalu mengembalikan nilai salah. Saya bisa melihat file fx 2930.jpgdi DDMS di eclipse.

Kegentingan
sumber

Jawaban:

139

The getFilesDir()entah bagaimana tidak bekerja. Menggunakan metode, yang mengembalikan seluruh jalur dan nama file memberikan hasil yang diinginkan. Ini kodenya:

File file = new File(inputHandle.getImgPath(id));
boolean deleted = file.delete();
Kegentingan
sumber
Dimana inputHandle.getImgPath(id)adalah filepath
Pratik Butani
45

Sudahkah Anda mencoba Context.deleteFile () ?

Konstantin Burov
sumber
Mencoba varian dengan Contex.deletFile (), yang tidak berhasil. Di bawah ini adalah apa yang tampaknya berhasil.
Crunch
@ user661543 Apa path lengkap yang dikembalikan oleh ih.getImgPath ()? Apa yang Anda berikan sebagai argumen untuk menghapus file? Jika metode di atas tidak berhasil, kemungkinan besar menyimpan file Anda dari paket aplikasi. Atau Anda mungkin telah memberikan nama file yang salah sebagai argumen.
Konstantin Burov
+1 Ini cara termudah untuk menghapus file yang ditulis melaluinew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen
18

Ini bekerja untuk saya:

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

context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
Jiyeh
sumber
14
String dir = getFilesDir().getAbsolutePath();
File f0 = new File(dir, "myFile");
boolean d0 = f0.delete(); 
Log.w("Delete Check", "File deleted: " + dir + "/myFile " + d0);

Kode File dir = getFilesDir();tidak berfungsi karena ini adalah permintaan untuk objek File. Anda mencoba mengambil String yang mendeklarasikan jalur ke direktori Anda, jadi Anda perlu mendeklarasikan 'dir' sebagai String, lalu meminta agar jalur absolut direktori dalam bentuk String dikembalikan oleh konstruktor yang memiliki akses ke informasi tersebut. .

VikingGlen
sumber
10

Anda juga bisa menggunakan: file.getCanonicalFile().delete();

mvsjes2
sumber
2

Apakah Anda mencoba getFilesDir().getAbsolutePath()?

Sepertinya Anda memperbaiki masalah Anda dengan menginisialisasi objek File dengan jalur lengkap. Saya yakin ini juga akan berhasil.

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

tidak berfungsi dalam kasus saya.

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

selalu mengembalikan nilai salah.

Masalah telah diselesaikan dengan menggunakan kode di bawah ini:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
Vishakha
sumber
Aku tahu aku tidak bisa meninggalkan pesan 'terima kasih', tapi .... aku sangat mencintaimu !!!!! TERIMA KASIH!
kinghomer
0

Ini adalah topik lama, tetapi saya akan menambahkan pengalaman saya, mungkin seseorang menganggap ini berguna

>     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

solusi1:

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

di sini saya menginisialisasi pemecah konten dan menghapusnya dengan parameter yang diteruskan dari URI itu

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

solution2 (solusi pertama saya-dari kepala saat ini saya tahu itu): resolver konten ada ...

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

Semoga ini bisa membantu seseorang yang senang coding

Nenad Štrbić
sumber