public class DBManager { private final int BUFFER_SIZE = 400000; private static final String PACKAGE_NAME = "com.city.list.main"; private static final String DB_NAME = "china_province_city_zone.db"; private static final String DB_PATH = "/data" + Environment.getDataDirectory().getAbsolutePath() + "/" + PACKAGE_NAME; // 存放路径 private Context mContext; private SQLiteDatabase database; public DBManager(Context context) { this.mContext = context; } /** * 被调用方法 */ public void openDateBase() { this.database = this.openDateBase(DB_PATH + "/" + DB_NAME); } /** * 打开数据库 * * @param dbFile * @return SQLiteDatabase * @author sy */ private SQLiteDatabase openDateBase(String dbFile) { File file = new File(dbFile); if (!file.exists()) { 打开raw中得数据库文件,获得stream流 InputStream stream = this.mContext.getResources().openRawResource(R.raw.china_province_city_zone); try { //将获取到的stream 流写入道data中 FileOutputStream outputStream = new FileOutputStream(dbFile); byte[] buffer = new byte[BUFFER_SIZE]; int count = 0; while ((count = stream.read(buffer)) > 0) { outputStream.write(buffer, 0, count); } outputStream.close(); stream.close(); SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, null); return db; } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return database; } public void closeDatabase() { this.database.close(); } }
一个工具类,可以直接把raw文件下的db数据库写入到data下。
