0

我正在尝试使用以下方法访问用于 xml 解析的文件:

InputStream inputStream = context.getAssets().open("/mnt/sdcard/cat/bird/flowers.xml");

当它运行时,我收到以下错误:

06-13 23:13:22.620: W/System.err(3118): java.io.FileNotFoundException: /mnt/sdcard/cat/bird/flowers.xml
06-13 23:13:22.620: W/System.err(3118):     at android.content.res.AssetManager.openAsset(Native Method)
06-13 23:13:22.620: W/System.err(3118):     at android.content.res.AssetManager.open(AssetManager.java:314)
06-13 23:13:22.620: W/System.err(3118):     at android.content.res.AssetManager.open(AssetManager.java:288)

我检查了文件的拼写,并多次检查了位置。该文件在那里并正确命名。这里发生了什么?

谢谢

4

3 回答 3

5

getAssets().open(...)用于访问与 .apk 文件一起打包的文件,方法是将它们放在项目/assets目录中。

正在尝试使用此路径打开文件...

/mnt/sdcard/cat/bird/flowers.xml

...意味着AssetManager将尝试查找您最初使用以下路径放置在项目中的打包文件...

/assets/mnt/sdcard/cat/bird/flowers.xml
于 2012-06-13T23:52:40.783 回答
3

确保您具有以下权限。(可能不需要仅仅阅读)。在某些从 sdcard 读取的设备上也受到限制。

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

也不要使用硬编码路径,使用以下获取外部存储路径。

String path = Environment.getExternalStorageDirectory() + "/cat/bird/flowers.xml";
于 2012-06-13T23:43:49.620 回答
0

通常getAssets()用于访问项目中资产文件夹中的文件。你应该使用类似的东西:

InputStream inputStream = new FileInputStream("//sdcard//cat//bird//flowers.xml");
于 2012-06-13T23:56:49.667 回答