下载内容的缓存与数据存储

时间:2013-11-04 22:50:58

标签: android storage

我通过向服务器发出HTTP GET请求来下载一些文本数据。我想保存下载的文本文件,以便在已经下载的情况下根据请求重新使用它。但我希望将我的数据保密,以便其他任何应用都无法访问它。另一方面,如果没有足够的磁盘空间,Android会删除该文件。

所以,我的问题是 - 我应该将下载的内容存储在App Data文件夹还是缓存文件夹中?两个之间有什么区别吗?

首先,我曾经使用像

这样的方法在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();
    }
}

我无法再将Private属性设置为我的文件,因此,据我所知,任何应用程序都可以访问我的数据。我是对的吗?

也许有办法让缓存目录中的文件变为私有?或者将文件保存到哪里并不重要?

2 个答案:

答案 0 :(得分:13)

CacheDirFilesDir都是应用专用的,任何其他应用都无法访问。

但是,如果用户已植根其设备,则可以访问这两个。

CacheDir用于临时文件,如果需要通过Android OS释放空间,可以删除它们。除非应用程序,用户或卸载应用程序明确这样做,否则不会清除Files目录。

答案 1 :(得分:1)

这包含在文档中:

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

  

保存缓存文件

     

如果您想缓存一些数据,而不是持久存储,   你应该使用getCacheDir()打开一个代表的文件   应用程序应保存临时缓存的内部目录   文件。

     

当设备内部存储空间不足时,Android可能会删除   这些缓存文件可以恢复空间。但是,你不应该依赖   系统为您清理这些文件。你应该永远保持   缓存文件自己并保持在合理的空间限制内   消耗,如1MB。当用户卸载您的应用程序时   这些文件已删除。

缓存中的数据只能访问您的应用程序(如果它没有根,但这是用户选择以最小化安全性)