ลบไฟล์จากที่จัดเก็บข้อมูลภายใน


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

ตัวอย่างของฉันส่งคืนเท็จเสมอ ฉันเห็นไฟล์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 () ซึ่งไม่ได้ผล ด้านล่างนี้คือสิ่งที่ดูเหมือนจะได้ผล
กระทืบ

@ user661543 เส้นทางเต็มที่ส่งคืนโดย ih.getImgPath () คืออะไร สิ่งที่คุณส่งเป็นอาร์กิวเมนต์ในการลบไฟล์? หากวิธีการข้างต้นไม่ได้ผลเป็นไปได้มากว่าจะเก็บไฟล์ของคุณไว้นอกแพ็คเกจแอปพลิเคชัน หรือคุณอาจส่งชื่อไฟล์ผิดเป็นอาร์กิวเมนต์
Konstantin Burov

+1 เป็นวิธีที่ง่ายที่สุดในการลบไฟล์ที่เขียนผ่านnew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

19

สิ่งนี้ใช้ได้กับฉัน:

Java

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

MediaScannerConnection.scanFile(context,
                new String[]{file.toString()},
                new String[]{file.getName()},null);

Kotlin

val file = File(photoPath) 
file.delete()

MediaScannerConnection.scanFile(context, arrayOf(file.toString()),
      arrayOf(file.getName()), null)

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();ไม่ทำงานเนื่องจากเป็นการร้องขอสำหรับวัตถุไฟล์ คุณกำลังพยายามดึง String ที่ประกาศเส้นทางไปยังไดเร็กทอรีของคุณดังนั้นคุณต้องประกาศ 'dir' เป็น String จากนั้นขอให้ส่งคืนพา ธ สัมบูรณ์ของไดเร็กทอรีในรูปแบบ String โดยตัวสร้างที่มีสิทธิ์เข้าถึงข้อมูลนั้น .



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 

ส่งคืนเท็จเสมอ

ปัญหาได้รับการแก้ไขแล้วโดยใช้รหัสด้านล่าง:

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

ฉันรู้ว่าฉันทิ้งข้อความ 'ขอบคุณ' ไม่ได้ แต่ .... ฉันรักคุณมาก !!!!! ขอบคุณ!
kinghomer

คนสุดท้ายทำงาน
Rahul Gaur

2

คุณได้ลอง getFilesDir().getAbsolutePath()หรือยัง?

ดูเหมือนว่าคุณได้แก้ไขปัญหาของคุณโดยการเริ่มต้นอ็อบเจ็กต์ไฟล์ด้วยพา ธ แบบเต็ม ฉันเชื่อว่านี่จะเป็นเคล็ดลับเช่นกัน


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

หวังว่าสิ่งนี้จะเป็นประโยชน์สำหรับคนที่มีความสุขในการเขียนโค้ด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.