11

サーバーに HTTP GET リクエストを発行して、テキスト データをダウンロードしています。ダウンロードしたテキスト ファイルを保存して、既にダウンロードされている場合は、要求に応じて再利用したいと考えています。しかし、他のアプリがアクセスできないように、データを非公開にしたい. 一方、十分なディスク容量がない場合は、Android がそのファイルを削除しても問題ありません。

それで、私の質問は - ダウンロードしたコンテンツを App Data フォルダーまたはキャッシュフォルダーに保存する必要がありますか? 2つに違いはありますか?

まず、次のような方法を使用して、App Dataフォルダーにファイルを保存していました

public void save(String fileName, String data) {
    FileOutputStream fos;
    try {
        fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE);
        fos.write(data.getBytes());
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

この方法を使用すると、ファイルにプライベート モードを設定して、他のアプリがファイルにアクセスできないようにすることができます。しかし、ファイルをキャッシュディレクトリに移動することを考えました。次のようなことをする必要があります

private void save(String filename, String data) {
    File cacheDir = new File(mContext.getCacheDir(), "app_directory");
    cacheDir.mkdir();
    try {
        FileOutputStream fos = new FileOutputStream(new File(cacheDir, filename));
        fos.write(data.getBytes());
        fos.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

ファイルにプライベート属性を設定することはできなくなったので、私が理解しているように、どのアプリケーションも私のデータにアクセスできます。私は正しいですか?

キャッシュディレクトリ内のファイルを非公開にする方法はありますか? それとも、ファイルをどこに保存するかは問題ではありませんか?

4

2 に答える 2

19

CacheDirと はどちらもFilesDirアプリ固有であり、他のアプリからはアクセスできません。

ただし、ユーザーがデバイスをルート化していれば、これらの両方にアクセスできます。

CacheDir は一時ファイル用であり、Android OS によってスペースを解放する必要がある場合は削除される可能性があります。Files dir は、アプリまたはユーザーによって明示的に行われるか、アプリがアンインストールされない限り、クリアされません。

于 2013-11-04T22:55:23.587 に答える
1

これはドキュメントでカバーされています:

http://developer.android.com/guide/topics/data/data-storage.html

キャッシュファイルの保存

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

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

キャッシュ内のデータはアプリにのみアクセスできます (root 化されていない場合は、セキュリティを最小限に抑えるためのユーザーの選択です)

于 2013-11-04T22:56:18.653 に答える