1

我正在尝试解析我的 android 设备上 sdCard 上的 XML 文件。

这段代码——

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);

输出此错误 -

无法打开 /mnt/sdcard/Speedr/pg55/META-INF/container.xml

引起:java.net.MalformedURLException:找不到协议:/mnt/sdcard/Speedr/pg55/META-INF/container.xml

为了简单起见,我更改了 sp.parse() 位置,但这正是实际代码中传递给方法的内容。我还去掉了应该围绕它的 try/catch 括号。

该文件肯定在那里,如果我在手机或计算机上浏览它,我可以看到它,并且位置也是正确的,因为它没有给我 FileNotFound 错误。

我最初用独立的 Java 构建了这段代码,并试图在 Android 设备上实现它并遇到了这个错误。错误日志确实没有多大帮助。

我将非常感谢我能从这里的任何人那里得到任何帮助。

4

3 回答 3

1

您是否在清单中启用或添加了 SD 卡权限?

于 2011-04-22T22:07:11.040 回答
1

请确保您的 .xml 文件中包含以下权限androidManifest.xml,以防您想修改您的 xml 或保存其他:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

并将您的代码更改为:

final File xml = new File(Environment.getExternalStorageDirectory().
        getAbsolutePath() + "Speedr/pg55/META-INF/container.xml");
sp.parse(xml, xmlHandler);

通过这种方式,您将文件传递给解析器,因此您无需指定file://协议。
尽量不要使用静态路径。外部存储路径因设备而异。
使用Environment.getExternalStorageDirectory()是好的做法。

您可能还想检查xml文件是否存在等,但基本上这是它应该工作的方式。

请参阅这篇关于在 Android 开发者上使用外部存储的文章,以进一步检查存储状态等。

于 2011-04-22T23:00:17.957 回答
1

您必须指定协议,如 http、ftp、文件等。在这里,您从 sdcard 访问它,因此它将"file://"在整个路径之前。

现在用这个修改你的代码片段,

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
sp.parse("file://" + "/mnt/sdcard/Speedr/pg55/META-INF/container.xml", xmlHandler);
于 2013-05-17T17:04:53.460 回答