资源文件拷贝的三种方式 === - 类加载器(类路径) - 用`Classloader.getResourceAsStream()`来读取类路径中的资源,然后用`FileOutputStream`写入到自己的应用中(*sdk开发的时候经常用这种方式*)。 - 这种方式**必须**要将数据库`address.db`放到**src**目录下,这样编译后就会直接将`address.db`生成到`bin/classes`目录中,会在类路径下, 所以可以使用`Classloader`进行加载. ```java InputStream is = getClassLoader().getResourceAsStream("address.db"); File file = new File(/data/data/包名/files/address.db); FileOutputStream fos = new FileOutputStream(file); ``` - Raw目录 将资源文件放到`res-raw`下, 然后用`getResources.openRawResource(R.raw.addresss);`(要求资源最好不超过1M,因为系统会编译`res`目录) - Assets目录 将资源文件放到`Assets`目录中。然后用`mContext.getAssets().open("address.db");`来读取该资源(`Assets`目录中的文件不会被编译,会原封不动的打包到apk中, 所以一般用来存放比较大的资源文件) 注意:上面这是在`Eclipse`中的使用方式,因为在`Eclipse`中`assets`目录是在`res`下,但是在`Android Studio`中如果这样使用会报`FileNotFoundException`,为什么呢? 文件名字没错,而且明明是在`assets`目录中的,这是因为在`Studio`中`assets`文件夹的目录层级发生了变化,直接在`module`下,与`src`目录平级了?该如何修改呢? 答案就是把`assets`目录移`src/main`下面就可以了?为什么呢?因为我们打开`app.impl`可以看到`