我正在尝试使用以下方法访问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)
我检查了文件的拼写,我已多次检查过该位置。该文件在那里并正确命名。这是怎么回事?
由于
答案 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");