SQLの窓

2017年01月23日


Android 内の画像データの一覧を CSV に出力する

出力場所として、USB 参照できる場所にフォルダを作成してその中に CSV ファイルを書き込むようにします。おそらく最新の CSV を USB 経由で確認するには、Android 本体を再起動する必要があると思いますが、パッケージ内部に作成するといろいろ面倒なので、こうした上で Android Device Monitor から pull で 取り出すのがいいと思います。
	private String okhttp_folder;
	private String[] columnNames;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);


		// USB から参照可能な場所にフォルダを作成
		// 但し、更新直後のデータのアクセスは、Device Monitor
		// USB からの場合は Device を再起動
		okhttp_folder = Environment.getExternalStorageDirectory().getPath() + "/okhttp";
		File file = new File(okhttp_folder);
		// ディレクトリ初期作成
		if (!file.exists()) {
			if (file.mkdir() == false) {
				Log.i("lightbox", "ディレクトリを作成できませんでした");
			}
		}

		Button button = (Button) MainActivity.this.findViewById(R.id.button);
		button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				writeCsv("image_data.csv");
			}
		});
	}


CSV ファイルを作成しやすいよう(カンマの付加を単純にする為)に、固定で row_no を先頭に追加しています。最初に列名リストを取得していますが、この際、カーソルを取得するだけで取り出し可能です。データ部分は moveToFirst と moveToNext が必要ですが、一行で実行するために三項演算子を使用しています(初回のみ null で以降 true か false)。

結果の内容を Excel で開いた様子
	private void writeCsv( String filename ) {

		ContentResolver contentResolver = getContentResolver();
		Uri listing = MediaStore.Images.Media.getContentUri("external");
		Log.i("lightbox", "Content URI : " + listing.toString());
		// ▲ content://media/external/images/media
		Cursor cursor;

		cursor	= contentResolver.query(listing, null, null, null, null);

		// 行バッファ
		StringBuilder builder = new StringBuilder();

		// 列名一覧
		String[] columnNames = cursor.getColumnNames();
/*
		_id
		_data
		_size
		_display_name
		mime_type
		title
		date_added
		date_modified
		description
		picasa_id
		isprivate
		latitude
		longitude
		datetaken
		orientation
		mini_thumb_magic
		bucket_id
		bucket_display_name
		width
		height
*/

		// CSV データを作成
		builder.append("row_no");
		for ( int i = 0; i < columnNames.length; i++ ) {
			builder.append(",");
			builder.append(columnNames[i]);
		}
		builder.append("\n");
		cursor.close();

		try {
			FileOutputStream stream = new FileOutputStream(new File(okhttp_folder + "/" + filename));
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stream));

			cursor = contentResolver.query(listing, null, null, null, null);
			int columnCount = cursor.getColumnCount();
			int rowCount = 0;

			// 画像のデータを取得
			Boolean isData = null;
			while ( isData == null ? (isData = cursor.moveToFirst()) : (isData = cursor.moveToNext()) ) {

				rowCount++;
				builder.append(rowCount);
				for ( int i = 0; i < columnCount; i++ ) {
					builder.append(",");
					builder.append(cursor.getString(i));
				}
				builder.append("\n");

			}

			// 全てを書込み
			writer.write(builder.toString());

			writer.flush();
			writer.close();
			Log.i("lightbox","CSV出力完了");

		} catch (Exception e) {
			e.printStackTrace();
		}

	}



【2017 Android Studioの最新記事】
posted by lightbox at 2017-01-23 22:47 | 2017 Android Studio | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり