2011年9月6日火曜日

AndroidのデータベースファイルをSDカードにコピーする方法

Androidで、アプリ用ディレクトリ内(/data/data/<package-name>/)に作成されるDBファイルをSDカードにコピーする。
方法
/**
* DBファイルをSDカードにコピーする
* AndroidManifest.xmlにWRITE_EXTERNAL_STORAGEを設定すること
*
* @param Context context メソッド呼び出し元(Activity等)のContext
* @param String dbName コピー元となるデータベースファイル名
* @return コピーに成功した場合true
* @throws IOException なんかエラーが起きた場合にthrow
*/
public static boolean copyDb2Sd(Context context, String dbName) throws IOException {

final String TAG = "copyDb2Sd";

//保存先(SDカード)のディレクトリを確保
String pathSd = new StringBuilder()
.append(Environment.getExternalStorageDirectory().getPath())
.append("/")
.append(context.getPackageName())
.toString();
File filePathToSaved = new File(pathSd);
if (!filePathToSaved.exists() && !filePathToSaved.mkdirs()) {
throw new IOException("FAILED_TO_CREATE_PATH_ON_SD");
}

final String fileDb = context.getDatabasePath(dbName).getPath();
final String fileSd = new StringBuilder()
.append(pathSd)
.append("/")
.append(dbName)
.append(".")
.append((new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date()))
.toString();

Log.i(TAG, "copy from(DB): "+fileDb);
Log.i(TAG, "copy to(SD) : "+fileSd);

FileChannel channelSource = new FileInputStream(fileDb).getChannel();
FileChannel channelTarget = new FileOutputStream(fileSd).getChannel();

channelSource.transferTo(0, channelSource.size(), channelTarget);

channelSource.close();
channelTarget.close();

return true;
}
DDMSからコピーする時はFile Explorerで。

0 件のコメント:

コメントを投稿