-1

我正在尝试制作一个在 sd 卡上保存临时文件的应用程序。

如果用户没有 sd 卡,我希望应用程序将文件保存在内部存储中

对不起我的英语。

4

2 回答 2

4

这是我用于在 SD 卡或内部存储上缓存的内容,但要小心。您必须定期清除缓存,尤其是在内部存储上。

private static boolean sIsDiskCacheAvailable = false;
private static File sRootDir = null;

public static void initializeCacheDir(Context context){
    Context appContext = context.getApplicationContext();

    File rootDir = null;

    if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
        // SD card is mounted, use it for the cache
        rootDir = appContext.getExternalCacheDir();
    } else {
        // SD card is unavailable, fall back to internal cache
        rootDir = appContext.getCacheDir();

        if(rootDir == null){
            sIsDiskCacheAvailable = false;
            return;
        }
    }

    sRootDir = rootDir;

    // If the app doesn't yet have a cache dir, create it
    if(sRootDir.mkdirs()){
        // Create the '.nomedia' file, to prevent the mediastore from scanning your temp files
        File nomedia = new File(sRootDir.getAbsolutePath(), ".nomedia");
        try{
            nomedia.createNewFile();
        } catch(IOException e){
            Log.e(ImageCache.class.getSimpleName(), "Failed creating .nomedia file!", e);
        }
    }

    sIsDiskCacheAvailable = sRootDir.exists();

    if(!sIsDiskCacheAvailable){
        Log.w(ImageCache.class.getSimpleName(), "Failed creating disk cache directory " + sRootDir.getAbsolutePath());
    } else {
        Log.d(ImageCache.class.getSimpleName(), "Caching enabled in: " + sRootDir.getAbsolutePath());

        // The cache dir is created, you can use it to store files
    }
}
于 2013-01-03T14:27:56.403 回答
0

您可以使用 Context 的 getExternalCacheDir() 方法获取文件引用,您可以在其中将文件存储在 SD 卡上。当然,您必须像往常一样进行常规检查以确保外部存储已安装并可写,但这可能是存储该类型临时文件的最佳位置。您可能想要做的一件事就是设置您可以在缓存目录中使用的最大空间量,然后,每当您需要写入新的临时文件时,如果该文件超过最大空间,则开始删除临时文件,从最旧的开始,直到有足够的空间。或者,也许这样的事情会起作用:

 if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
File externalRoot = Environment.getExternalStorageDirectory();
File tempDir = new File(externalRoot, ".myAppTemp");
 }

在前面加上“。” 应该使文件夹隐藏,我很确定。

于 2013-01-03T14:20:14.820 回答