内部ストレージからファイルを削除


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.jpgDDMSでファイルを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 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オブジェクトをフルパスで初期化することで問題を解決したようです。これもうまくいくと思います。


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

ここでコンテンツリゾルバーを初期化し、その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 ();
            }

これが誰かの幸せなコーディングに役立つことを願っています


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

私の場合は機能していません。

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

常にfalseを返します。

この問題は、以下のコードを使用することで解決されました。

ContentResolver contentResolver = getContentResolver();
contentResolver.delete(uriDelete, null, null);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.