今回はAndroidアプリ上で、sqliteデータベースに登録されたデータをCSV出力する機能について書きます。
完成イメージは以下です。
出力したCSVファイルの中身は以下。
1.CSV出力ボタンにダイアログ機能を実装
csvOutputButtonというIDのボタンをクリック時にconfirmOutput()メソッドを呼び出し、ダイアログ出力をします。
// CSV出力ボタン処理
Button csvOutputBtn = (Button) findViewById(R.id.csvOutputButton);
csvOutputBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
confirmOutput();
}
});
private void confirmOutput() {
new AlertDialog.Builder(this)
.setTitle("CSV出力")
.setMessage(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString() + System.getProperty("line.separator") +"に出力します。")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
exportDatabase();
}
})
.setNegativeButton("Cancel", null)
.show();
}
2.CSV出力するメソッドの実装
exportDatabase()メソッドにsqliteのデータをCSV出力する実装をします。
private boolean exportDatabase() {
// 外部ストレージがマウントされている事を確認
String state = Environment.getExternalStorageState();
if (!Environment.MEDIA_MOUNTED.equals(state)) {
return false;
} else {
File exportDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File file;
PrintWriter printWriter = null;
try {
file = new File(exportDir, "PasswordListFile.csv");
file.createNewFile();
printWriter = new PrintWriter(new FileWriter(file));
SQLiteDatabase.loadLibs(this);
ListDataOpenHelper helper = new ListDataOpenHelper(this);
SQLiteDatabase db = helper.getReadableDatabase(LoginActivity.secretKey);
Cursor curCSV = db.rawQuery("select * from passworddata", null);
// CSVファイルのヘッダーを書き出し
printWriter.println("ID,TITLE,ACCOUNT,PASSWORD,MEMO,INPUTDATE");
// データの行数分CSV形式でデータを書き出し
while (curCSV.moveToNext()) {
String id = curCSV.getString(curCSV.getColumnIndex("id"));
String title = curCSV.getString(curCSV.getColumnIndex("title"));
String account = curCSV.getString(curCSV.getColumnIndex("account"));
String password = curCSV.getString(curCSV.getColumnIndex("password"));
String memo = curCSV.getString(curCSV.getColumnIndex("memo"));
String inputdate = curCSV.getString(curCSV.getColumnIndex("inputdate"));
String record = id + "," + title + "," + account + "," + password + "," + memo + "," + inputdate;
printWriter.println(record);
}
curCSV.close();
db.close();
} catch (FileNotFoundException exc) {
// フォルダへのアクセス権限がない場合の表示
Toast ts = Toast.makeText(this, "アクセス権限がありません", Toast.LENGTH_SHORT);
ts.show();
return false;
} catch (Exception exc) {
Toast ts = Toast.makeText(this, "CSV出力が失敗しました", Toast.LENGTH_SHORT);
ts.show();
return false;
} finally {
if (printWriter != null) printWriter.close();
}
Toast ts = Toast.makeText(this, "CSVに出力しました", Toast.LENGTH_SHORT);
ts.show();
return true;
}
}
以上です。
上記機能をパスワード 管理アプリ「パスワードメモ」にアップデートで追加しましたのでぜひバックアップ用途として使って下さい。

