我的应用程序在手机的 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/