开发中常会遇到一个问题,需要得到本地数据库里保存的数据。但一般数据库文件在手机上是无法直接访问到的,除非手机越狱了,那如果手机没有越狱呢,怎么得到该数据?
有一个很方便的方法,可以将数据库文件拷贝到SD卡里,就可以访问了,详细代码如下:
// savePath 拷贝的数据库文件存放的路径
// databaseName 需要拷贝的数据库名称
public static void copyDataBaseToSD(String savePath,String databaseName){
File rootFile = new File(savePath + "/");
if (!rootFile.exists()) {
rootFile.getParentFile().mkdirs();
}
String saveDir = savePath + "/";
File dir = new File(saveDir);
if (!dir.exists()) {
dir.mkdirs();
}
makeRootDir(saveDir);
//获得数据库文件
File dbFile = new File(AppContext.getInstance().getDatabasePath(databaseName)+".db");
File file = new File(savePath, databaseName+".db");
FileChannel inChannel = null,outChannel = null;
try {
file.createNewFile();
inChannel = new FileInputStream(dbFile).getChannel();
outChannel = new FileOutputStream(file).getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
} catch (Exception e) {
Log.e(TAG, "copy dataBase to SD error.");
e.printStackTrace();
}finally{
try {
if (inChannel != null) {
inChannel.close();
inChannel = null;
}
if(outChannel != null){
outChannel.close();
outChannel = null;
}
} catch (IOException e) {
Log.e(TAG, "file close error.");
e.printStackTrace();
}
}
}