即使文件存在,也会收到FileNotFoundException

时间:2012-06-13 23:27:04

标签: android inputstream

我正在尝试使用以下方法访问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)

我检查了文件的拼写,我已多次检查过该位置。该文件在那里并正确命名。这是怎么回事?

由于

3 个答案:

答案 0 :(得分:5)

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

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

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

...表示AssetManager会尝试使用以下路径查找您最初放置在项目中的打包文件...

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

答案 1 :(得分:3)

确保您拥有以下权限。 (可能不需要阅读)。另外在某些设备上,从SD卡读取也受到限制。

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

另外,请勿使用硬编码路径,请使用以下命令获取外部存储路径。

String path = Environment.getExternalStorageDirectory() + "/cat/bird/flowers.xml";

答案 2 :(得分:0)

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

InputStream inputStream = new FileInputStream("//sdcard//cat//bird//flowers.xml");