내부 저장소에서 파일 삭제


95

내부 저장소에 저장된 이미지를 삭제하려고합니다. 나는 이것을 지금까지 생각해 냈다.

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

내 예는 항상 false를 반환합니다. fx 2930.jpg이클립스에서 DDMS 의 파일 을 볼 수 있습니다 .

답변:


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 2011

+1 다음을 통해 작성된 파일을 제거하는 가장 간단한 방법new OutputStreamWriter(context.openFileOutput(fileName, Context.MODE_PRIVATE)).write(data);
Eugen

18

이것은 나를 위해 작동합니다.

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();File 객체에 대한 요청이므로 코드 가 작동하지 않습니다. 디렉토리 경로를 선언하는 문자열을 검색하려고하므로 'dir'을 문자열로 선언 한 다음 해당 정보에 액세스 할 수있는 생성자가 문자열 형식의 디렉토리 절대 경로를 반환하도록 요청해야합니다. .


10

다음을 사용할 수도 있습니다. file.getCanonicalFile().delete();


2

시도해 보셨습니까 getFilesDir().getAbsolutePath()?

전체 경로로 File 객체를 초기화하여 문제를 해결 한 것 같습니다. 나는 이것이 또한 트릭을 할 것이라고 믿습니다.


2
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

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

solution1 :

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

여기서 Content resolver를 초기화하고 해당 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.