在我的应用中,我需要读取外部和内部文件路径。换句话说,如果用户希望,则用户可以从内部存储器中选择文件,如果他愿意,则可以从SD卡中选择文件。
我在搜索SO时发现了这个:
使用getExternalStorageDirectory()来访问外部存储。 使用getFilesDir()来获取应用程序的内部存储空间。
但我怎么知道用户是从外部还是内部目录中选择了一个文件?
答案 0 :(得分:0)
以下是从内部存储中读取图像的示例方法;
public Bitmap readFromInternalStorage(String filename){
try {
File filePath = this.getFileStreamPath(filename);
FileInputStream fi = new FileInputStream(filePath);
return BitmapFactory.decodeStream(fi);
} catch (Exception ex) { /* handle exception like a king here */}
return null;
}
现在,您可以从这里做的是查看值是否为 null ,如果是,则尝试使用相应的方法从外部存储中读取!
当然,您还可以使用类变量来跟踪图像/文件来自哪个源(内部或外部),并根据调用的方法相应地更新它们。
我希望这可以帮助您解决这个问题!祝你好运。
答案 1 :(得分:0)
但我怎么知道用户是从外部还是内部目录中选择了一个文件?
这取决于您的用户界面。您就是构建文件浏览UI的人,因此您知道在文件浏览UI中使用了哪个根目录。
当然,很可能在任何这些位置都没有任何文件。
getFilesDir()
是internal storage的一部分,其中唯一的文件将是您自己放置的文件。
getExternalFilesDir()
是external storage的一部分。理论上,用户可以使用其他工具(如桌面操作系统)将文件放在此目录中。在实践中,用户不太可能这样做,除了你的代码之外,没有别的东西可以将文件放在该目录中。
当然欢迎您编写一个文件浏览用户界面,该用户界面使用其他外部存储位置,例如Environment.getExternalStoragePublicDirectory()
,它们更有可能实际包含文件。