近期在学Android基础的时候(Android Studio开发),学到了xml解析器,遇到了读取src路径下xml文件的时候抛FileNotFoundException的问题,但是这个情况在用eclipse+ADT开发的时候,就可以正常读取,没有错误,抛异常的具体代码如下:
weatherInfos=WeatherService.getWeatherInfos(MainActivity.class.getClassLoader().getResourceAsStream("weather.xml"));
本人查了很多资料,试了很多种方法,最后总结出,抛这个异常的原因是,Android Studio开发Android APP时和eclipse+ADT开发的工程目录结构是不同的,这大概是ideaj和eclipse编译java文件的不同。
众所周知,eclipse编写java程序时,是会默认生成一个bin目录的,而编译好的.class字节码文件会存在那个目录下,同时,系统会自动将src目录下的资源文件包括图片、xml和音视频等各种文件都拷贝到bin目录下,这样通过java反射机制就可以找到位于src下的资源文件,但是在ideaj中好像就不会生成bin目录,这样,通过java反射也就找不到我们需要的文件了,于是自然就会抛出FileNotFoundException,本人的解决方案是,将我们所需要的xml文件放入到assets目录下:路径如下:D:\161105024\asworkspace\exp05\app\src\main\assets\weather.xml
路径说明:D:\161105024\asworkspace是Android Studio的工作空间;exp05是工程名,app\src\main\asserts\是assets目录,下面的weather.xml是你要在Android APP中读入的xml文件名
将上面那句抛异常的语句改为:
weatherInfos=WeatherService.getWeatherInfos(this.getAssets().open("weather.xml"));这样就可以正确的读取到xml文件了