如何在android存储中写/读文件夹/文件

时间:2017-07-16 11:51:23

标签: android local-storage storage environment

目前,我正在使用以下方法在android外部存储中创建路径。

public void createPath() {
    String path = Environment.getExternalStorageDirectory().getPath()+"/myFolder/";
    boolean exists = (new File(path)).exists();
    if (!exists) {
        new File(path).mkdirs();
    }
}

据我所知getExternalStorageDirectory()并不专门指外部存储。因此,此方法将在用户首选存储(通常是内部存储)中创建myFolder

现在我有一个问题:

如果默认存储(用户首选存储)已设置为SD Card并且它不可读/可写,会发生什么?处理这种情况的最佳方法是什么?

换句话说,如何安全地创建此文件夹?(内部或外部无关紧要)。

2 个答案:

答案 0 :(得分:0)

在内部存储中创建文件夹是安全的,无需访问。

//Get free Size internal memory
File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath());
long blockSize = stat.getBlockSize();
long availableBlocks = stat.getAvailableBlocks();
long freeSizeInternalMemoryMB = ((availableBlocks * blockSize) / 1024) / 1024;

//2M available
if (freeSizeInternalMemoryMB > 2) {
    //code for create and copy file
}else{
    //show error for low storage
}

答案 1 :(得分:0)

  

据我所知,getExternalStorageDirectory()并不专门引用外部存储。

是的,它确实适用于Android SDK所指的external storage

  

因此,此方法将在用户首选存储(通常是内部存储)中创建myFolder。

不,Android SDK所指的是internal storage是另一回事。

  

如果默认存储(用户首选存储)已设置为SD卡并且它不可读/写,会发生什么?

Android本身没有"用户首选存储"的概念,除非我误解了你的描述。

  

如何安全地创建此文件夹?

你的代码似乎很好。

只有很小比例的设备(我的猜测:~0.1%),其中外部存储位于可移动媒体上。这是Android 1.x / 2.x的主流型号,但这些设备不再使用,大多数新设备都在板载闪存上有内部和外部存储。如果用户弹出可移动媒体,您将无法访问外部存储。 Environment上有一些方法可以获取外部存储状态。但是,您无法在用户可以访问的位置编写文件。您的选择将是:

  • 将文件存储在内部存储中,然后在媒体再次可用时将其迁移到外部存储

  • 请勿存储任何内容,要求用户再次提供外部存储空间