android - 在 Android 中从外部存储打开文件

标签 android file

这可能是一个快速修复,但目前我无法让它工作...

我有一个正在解析 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/

相关文章:

java - 如何在 Android 中设置警告框,是否有任何 API 可以将数据从应用程序发送到 URL

android - 在 Android ActionBar 上访问 ActionView

java - ini4j 存储方法更改注释字符

java - 我可以使用什么工具/实用程序来列出 Windows 上已删除的文件?

c - 从文件读取动态结构

java - 为什么我不能按照我需要的方式使用 TypeToken?

java - 安卓 Osmdroid : How to implement IArchiveFile interface for read pbf files using OSM binary library

android - 如何使用谷歌地图的 API KEY

python - 以 'r+' 模式打开文件会给出奇怪的输出

c - 在 C 中,将文本文件读入结构数组,然后用该数组写入新的文本文件