【发布时间】:2011-07-24 03:31:59
【问题描述】:
我如何使用Environment.getExternalStorageDirectory() 从 SD 卡中读取存储的图像,或者有更好的方法吗?
【问题讨论】:
我如何使用Environment.getExternalStorageDirectory() 从 SD 卡中读取存储的图像,或者有更好的方法吗?
【问题讨论】:
Environment.getExternalStorageDirectory().getAbsolutePath()
为您提供 SDCard 的完整路径。然后,您可以使用标准 Java 执行正常的文件 I/O 操作。
下面是一个写文件的简单例子:
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "myFile.txt";
// Not sure if the / is on the path or not
File f = new File(baseDir + File.separator + fileName);
f.write(...);
f.flush();
f.close();
编辑:
哎呀 - 你想要一个阅读的例子......
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String fileName = "myFile.txt";
// Not sure if the / is on the path or not
File f = new File(baseDir + File.Separator + fileName);
FileInputStream fiStream = new FileInputStream(f);
byte[] bytes;
// You might not get the whole file, lookup File I/O examples for Java
fiStream.read(bytes);
fiStream.close();
【讨论】:
Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
但请记住,getExternalStorageDirectory() 在某些手机上无法正常工作,例如我的摩托罗拉 razr maxx,因为它有 2 张卡 /mnt/sdcard 和 /mnt/sdcard-ext - 分别用于内部和外部 SD 卡。您每次只会收到 /mnt/sdcard 回复。谷歌必须提供一种方法来处理这种情况。因为它使许多支持 SD 卡的应用程序(即卡备份)在这些手机上惨遭失败。
【讨论】:
Environment.getExternalStorageDirectory().getAbsolutePath();
如文档Environment.getExternalStorageDirectory() 中所述:
Environment.getExternalStorageDirectory() 返回主 共享/外部存储目录。
这是一个如何使用它来读取图像的示例:
String fileName = "stored_image.jpg";
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String pathDir = baseDir + "/Android/data/com.mypackage.myapplication/";
File f = new File(pathDir + File.separator + fileName);
if(f.exists()){
Log.d("Application", "The file " + file.getName() + " exists!";
}else{
Log.d("Application", "The file no longer exists!";
}
【讨论】:
getExternalStorageDirectory(),我们可以在用户首选存储(通常是内部存储器)中创建新目录。那么,如果默认存储设置为External memory 并且它不是可读/可写,会发生什么?这会抛出异常吗?还是会自动在Internal storage创建?
要获取目录,可以使用下面的代码:
File cacheDir = new File(Environment.getExternalStorageDirectory() + File.separator + "");
【讨论】: