android初學之拷貝數據庫到本地

把須要的數據庫放在工程的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

相關文章
相關標籤/搜索