这可能是一个快速修复,但目前我无法让它工作...
我有一个正在解析 XML 文件的异步任务。如果我将 XML 文件放在 Assets 文件夹中,我可以毫无问题地打开和解析它。
但如果我尝试从外部存储打开 XML 文件,它会失败。
这是我的异步任务:
private class async extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
while (!isCancelled()) {
try {
NodeList nList;
Node node;
InputStream is = getAssets().open("file.xml");
// this works
File is = new File("/storage/emulated/0/test.xml");
// this fails
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(is);
我收到这个错误:
I/System.out: File path: /storage/emulated/0/test.xml
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/test.xml (Permission denied)
这些权限在我的 list 中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
谁能告诉我为什么会出现此错误?
谢谢!
最佳答案
我看到了你的错误信息:
java.io.FileNotFoundException: /storage/emulated/0/test.xml (Permission denied)
请记住,在 Android 6.0 上运行您必须实现 runtime permissions在您尝试读取或写入外部存储之前。
将此设置到您的 manifest.xml 中对于 Android 6.0+ 的设备是不够的:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
关于android - 在 Android 中从外部存储打开文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40936540/