web-dev-qa-db-ja.com

Androidに一時ファイルを作成しています

Androidで一時ファイルを作成する最良の方法は何ですか?

File.createTempFile を使用できますか?ドキュメントは非常にあいまいです。

特に、File.createTempFileで作成された一時ファイルがいつ削除されるかは明確ではありません。

187
hpique

これは私が通常行うことです:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

それらの削除については、私も完全に確信していません。キャッシュの実装でこれを使用しているため、キャッシュディレクトリのサイズがプリセット値に達するまで、最も古いファイルを手動で削除します。

258
sparkymat

内部 および 外部 一時ファイルのベストプラクティス:

内部キャッシュ

データを永続的に保存するのではなくキャッシュする場合は、getCacheDir()を使用して、アプリケーションが一時キャッシュファイルを保存する内部ディレクトリを表すFileを開く必要があります。

デバイスの内部ストレージスペースが少ない場合、Androidはこれらのキャッシュファイルを削除してスペースを回復します。ただし、これらのファイルをクリーンアップするためにシステムに依存しないでください。キャッシュファイルは常に自分で管理し、1MBなどの消費スペースの合理的な制限内にとどめる必要があります。ユーザーがアプリケーションをアンインストールすると、これらのファイルは削除されます。

外部キャッシュ

キャッシュファイルを保存する外部ストレージディレクトリを表すFileを開くには、getExternalCacheDir()を呼び出します。ユーザーがアプリケーションをアンインストールすると、これらのファイルは自動的に削除されます。

前述のContextCompat.getExternalFilesDirs()と同様に、ContextCompat.getExternalCacheDirs()を呼び出すことにより、セカンダリ外部ストレージ(使用可能な場合)上のキャッシュディレクトリにアクセスすることもできます。

ヒント:ファイルスペースを保持してアプリのパフォーマンスを維持するには、キャッシュファイルを慎重に管理し、アプリのライフサイクルを通じて不要になったキャッシュファイルを削除することが重要です。

89
mibollma

一時的な内部ファイルの場合、2つのオプションがあります

1。

File file; 
file = File.createTempFile(filename, null, this.getCacheDir());

2。

File file
file = new File(this.getCacheDir(), filename);

どちらのオプションもアプリケーションキャッシュディレクトリにファイルを追加するため、必要に応じてクリアしてスペースを空けることができますが、オプション1はファイル名の末尾に乱数を追加してファイルを一意にします。また、デフォルトで.tmpであるファイル拡張子も追加しますが、2番目のパラメーターを使用して任意に設定できます。乱数を使用すると、ファイル名を指定しても、サフィックス/ファイル拡張子(デフォルトでは.tmp)とともに番号が追加されるため、ファイル名はinternal_fileと指定したままになります。 internal_file1456345.tmpとして出力されます。拡張子を指定することはできますが、追加する番号を指定することはできません。ただし、file.getName();を使用して生成されるファイル名を見つけることはできますが、ファイルを削除したり読み取ったりするときにいつでも使用できるように、どこかに保存する必要があります。したがって、指定するファイル名は作成されるファイル名であるため、この理由で2番目のオプションを選択します。

34
AdrenalineJunky

context.getCacheDir() を使用してキャッシュディレクトリを使用できます。

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
13
Macarse

File.deleteOnExit()メソッドを使用できます

https://developer.Android.com/reference/Java/io/File.html#deleteOnExit()

ここで参照されます https://developer.Android.com/reference/Java/io/File.html#createTempFile(Java.lang.String 、Java.lang.String、Java.io.File )

0
kotucz

簡単にやってください。ドキュメントによると https://developer.Android.com/training/data-storage/files

String imageName = "IMG_" + String.valueOf(System.currentTimeMillis()) +".jpg";
        picFile = new File(ProfileActivity.this.getCacheDir(),imageName);

使用後に削除する

picFile.delete()
0
Shivam Dawar