在android中保存文件的目录?

时间:2012-06-18 07:02:58

标签: android android-sdcard

根据我的应用程序,我正在下载图片和一些数据,我需要将它们保存在手机内存或SD卡中。由于图片可能很大,我决定把它保存到SD卡中。我正在使用下面的代码来确定SD卡是否可用。如果是我正在使用SD卡,如果不是我正在使用手机内存。但问题是,如果我弹出SD卡,我的应用程序在启动时崩溃,我得到File Not Found异常。据我了解,由于手机有内置SD卡,

android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

始终返回“已装载”。我怎么能理解外部SD卡真的被弹出了?

编辑:我试图检查SD卡是否可用,因为我使用的是以下代码,因为手机内部有SD卡

android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)

总是返回true并且它创建没有SD卡的目录。因此,检查目录是否为null无法理解文件是否存在。以下是我的代码。

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) {
        cacheDir=new File(context.getExternalFilesDir(null), applicationDirectory + folderName);
    }
    else {
        cacheDir = new File(context.getCacheDir(), applicationDirectory + folderName);
    }
    if(!cacheDir.isDirectory())
        cacheDir.mkdirs();

所以根据我的解决方案,我尝试读取所需的文件,如果我得到FileNotFoundException,我会在应用程序启动时将所有内容从assets文件夹复制到目录(SD卡或手机内存),然后用布尔值控制它共享偏好中的值。这样,如果用户弹出SD卡,内容将被复制到手机内存,并将从该目录开始工作。

我需要大约10MB的缓存空间来保存我的一些文件,并且使用这个解决方案(我不确定它是否有效)如果用户运行应用程序,我将在SD卡和手机内存中都有我的内容什么时候没有SD卡。任何其他解决方案,找出保存文件,外部或内部存储器的位置?谢谢你的回答。任何想法将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以使用这些方法检查外部sd上的文件夹是否存在:

if(myFolder != null && myFolder.exists()) { /* work here */ }

myFolder将是一个针对外部sd的文件(您应该检查内部内存中的供应商映射,因为它们与每个供应商不同)。

可悲的是,两个sds并不是真正的Android方式,这导致Android认为内部sd是外部的。

有一个讨论和代码示例,用于查找外部sd here

答案 1 :(得分:1)

检查此主题:

How android application detects two SD CARDS in a device

也许您可以检查sdcards的文件夹是否存在并处理卡不存在的情况?

类似于:

sdcardloc = /mnt/sdcard/sdcard1;
if(sdcardloc != null && myFolder.exists()) { /*case where card is mounted*/ }

else { /*handle case where no card is mounted*/}

答案 2 :(得分:1)

外部SD卡,这个概念是针对设备供应商的。在android只有外部存储的概念。此外,Environment.getExternalStorageDirectory()指的是设备制造商认为是“外部存储”的任何内容。