把須要的數據庫放在工程的assets目錄下,這裏以「address.db」爲例 java
/** * 拷貝須要用到的數據庫文件 */ new Thread() { public void run() { Message msg = Message.obtain(); try { InputStream is = getAssets().open("address.db"); // 釋放文件到當前應用程序的目錄 // data/data/com.example.lx/files/address.db File destFile = new File(getFilesDir(),"address.db"); File file = FileCopyUtil.copy(is, destFile.getAbsolutePath()); if (file == null) { // 拷貝失敗 msg.what = COPY_ERROR; } else { // 拷貝成功 msg.what = COPY_SUCCESS; } } catch (IOException e) { e.printStackTrace(); // 拷貝失敗 msg.what = COPY_ERROR; }finally{ handler.sendMessage(msg); } }; }.start();
裏面調用的copyutil實際就是一個IO流拷貝類: 數據庫
public class FileCopyUtil { /** * * @param is 源文件輸入流 * @param path 拷貝到的地址 * @return null表明拷貝失敗,成功就返回拷貝後的文件 */ public static File copy(InputStream is, String path){ try { File file = new File(path); FileOutputStream fos = new FileOutputStream(file); byte [] buffer = new byte[1024]; int len; while((len = is.read(buffer)) != -1){ fos.write(buffer, 0, len); } fos.flush(); fos.close(); is.close(); return file; } catch (Exception e) { e.printStackTrace(); return null; } } }
這樣就把數據庫拷貝到了data/data/程序包名/files目錄下 code
注意:這個方法在Android2.3之前,所要拷貝的源文件的大小不能超過1M,2.3之後沒有了這個限制,因此要明確你模擬器的版本 get