Xóa tệp khỏi bộ nhớ trong


95

Tôi đang cố xóa hình ảnh được lưu trữ trong bộ nhớ trong. Tôi đã nghĩ ra điều này cho đến nay:

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

Và đây là từ một câu hỏi khác, được trả lời bằng :

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

Ví dụ của tôi luôn trả về false. Tôi có thể xem tệp fx 2930.jpgtrong DDMS trong nhật thực.

Câu trả lời:


139

Bằng getFilesDir()cách nào đó đã không hoạt động. Sử dụng một phương thức trả về toàn bộ đường dẫn và tên tệp cho kết quả mong muốn. Đây là mã:

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

Trong trường hợp inputHandle.getImgPath(id)filepath
Pratik Butani

45

Bạn đã thử Context.deleteFile () chưa?


Đã thử một biến thể với Contex.deletFile (), không hoạt động. Dưới đây là những gì dường như hoạt động.
Crunch

@ user661543 Đường dẫn đầy đủ được trả về bởi ih.getImgPath () là gì? Điều gì bạn đã chuyển làm đối số để xóa tệp? Nếu phương pháp trên không hoạt động thì rất có thể tệp của bạn đã lưu trữ ngoài gói ứng dụng. Hoặc bạn có thể đã chuyển sai tên tệp làm đối số.
Konstantin Burov

1 Đó là cách đơn giản nhất để tập tin remove bằng văn bản quanew OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

Điều này phù hợp với tôi:

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();không hoạt động vì đây là yêu cầu đối với đối tượng Tệp. Bạn đang cố gắng truy xuất Chuỗi khai báo đường dẫn đến thư mục của bạn, vì vậy bạn cần khai báo 'dir' dưới dạng Chuỗi, sau đó yêu cầu phương thức khởi tạo có quyền truy cập vào thông tin đó trả về đường dẫn tuyệt đối của thư mục trong biểu mẫu Chuỗi .


10

Bạn cũng có thể dùng: file.getCanonicalFile().delete();


2

Bạn đã thử getFilesDir().getAbsolutePath()chưa?

Có vẻ như bạn đã khắc phục sự cố của mình bằng cách khởi tạo đối tượng Tệp với một đường dẫn đầy đủ. Tôi tin rằng điều này cũng sẽ thành công.


0

Đây là một chủ đề cũ, nhưng tôi sẽ bổ sung kinh nghiệm của mình, có thể ai đó thấy điều này hữu ích

>     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

giải pháp1:

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

ở đây tôi khởi tạo trình phân giải Nội dung và xóa nó bằng một tham số được truyền của URI đó

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

giải pháp2 (giải pháp đầu tiên của tôi-từ đầu đến nay tôi biết điều đó): trình giải quyết nội dung tồn tại ...

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

Hy vọng rằng điều này sẽ hữu ích cho ai đó viết mã vui vẻ


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

không hoạt động trong trường hợp của tôi.

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

luôn trả về false.

Sự cố đã được giải quyết bằng cách sử dụng mã bên dưới:

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.