Android App create directory 适用于大多数,但在许多情况下会出现 unable to create directory on sdcard

标签 android file save sd-card android-sdcard

我的应用程序在手机的 SD 卡上创建了一个目录名称,并在其中存储了一堆图像。该代码对大多数用户来说工作正常,但有些用户报告保存文件时出错。

这是创建目录的代码: R.string.dir 设置为“/appname/”

dir = Environment.getExternalStorageDirectory() + ((String) getResources().getText(R.string.dir));

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
    File fDir = new File(dir);
    fDir.mkdirs();
}
else{
    showToast(false,"This Application needs a mounted external storage (sdcard).");
    finish();
}

所以此时应该创建目录(它最终是/mnt/sdcard/appname),或者应用程序完成。

然而,当尝试保存文件时,一些用户报告此异常:

Msg: java.io.FileNotFoundException: /mnt/sdcard/appname/file.jpg (No such file or directory)

保存代码:

File file = new File("/mnt/sdcard/appname/file.jpg");
FileOutputStream fos = null;
try {
    fos = new FileOutputStream( file );
    b.compress(Bitmap.CompressFormat.JPEG, 100, fos );
}
catch( Exception e ) {

有什么建议吗?可能是 mkdirs() 返回 false(如果目录已经创建,它会这样做,但我应该能够在那里写入文件)?如果安装了 SD 卡,它返回 false 的另一个原因是什么?我怎样才能更好地处理这个问题?

是的,我们正在使用唯一的文件名(附加 System.currentTimeMillis() 到文件名)。此外,流在最后关闭

        finally
        {

        if(fos != null) {

        try {

        fos.close();

        }
        catch(Exception ex){

        ex.printStackTrace();

        }

        }

最佳答案

您假设(在第二个代码示例中)所有设备中的 sdcard 路径都是 /mnt/sdcard/。这是一个错误的假设。你应该调用Environment.getExternalStorageDirectory得到正确的路径。

另外,可能是目录而不是文件,在打开输出流之前添加以下代码:

if (!file.exists()) {
    file.createNewFile();
}

关于Android App create directory 适用于大多数,但在许多情况下会出现 unable to create directory on sdcard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671304/

相关文章:

Android 设备没有响应

Android 应用内购买

android - 如何获取android中特定文件夹中的视频文件列表?

c - 为什么“while(!feof(file))”总是错误的?

能否用C知道运行时是否对磁盘进行了文件操作?

c# - ASP.NET 将响应保存到 global.asax 中的文件

arrays - 如何在 NSUserDefault swift 中保存/检索嵌套字典?

php - Android 浏览器拒绝内容处置 :inline?

save - Jenkins:如何保存构建的变更日志

java - 当用户按 Enter 时,EditText + Button onClick