ディレクトリ取得 のロジック
①アラートダイログでディレクトリを選ぶ
②ボタン1を押すとその下の階層のディレクトリをダイアログ表示
③再帰的にさいごまで繰り返す。
④ファイル名を入力して、出力ファイル名を決める。
しかし、アンドロイドでCSV出力場所には制限がある。
android/data/アプリ名/
かFile file = Environment.getExternalStorageDirectory();
// String path = file.getPath()+"/eigocsv.txt";
しかダメみたい。
public class CsvoutActivity extends Activity {
int selectnum = -1;
String result_item;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_csvout);
TextView tv3 = (TextView) findViewById(R.id.textView3);
File file = Environment.getExternalStorageDirectory();
// String path = file.getPath()+"/eigocsv.txt";
String path = file.getPath();
tv3.setText(path);
}
protected void onResume(){
super.onResume();
TextView tv3 = (TextView) findViewById(R.id.textView3);
String edit_path= tv3.getText().toString();
//入力されたファイルを取得
File dir = new File(edit_path);
//ディレクトリかの判断
if (dir.isDirectory() ){
edit_path = edit_path + "/";
tv3.setText(edit_path);
}
}
public void button1action(View view){
TextView tv3 = (TextView) findViewById(R.id.textView3);
final String edit_path= tv3.getText().toString();
//入力されたファイルを取得
File dir = new File(edit_path);
//リストを取得
final String files = dir.list();
String chkflname="";
int j = 0; ///////////////////////まず、ディレクトリの数だけ取得////
for (int i = 0; i < files.length; i++){
chkflname= edit_path + files[i];
// Log.v(" chkflname 1111= ",""+ chkflname +" "+i);
File chkdir = new File(chkflname);
//Log.v(" chkflname= ",""+ chkflname +" "+i);
if (chkdir.isDirectory() ){
//Log.v("files j = ",""+files[i] +" "+i);
//dspfiles[j] = files[i];
j = j+1;
}
}
//ディレクトリの数だけテーブルにセット
final String dspfiles = new String[j];
j = 0;
for (int i = 0; i < files.length; i++){
chkflname= edit_path + files[i];
File chkdir = new File(chkflname);
if (chkdir.isDirectory() ){
dspfiles[j] = files[i];
j = j+1;
}
}
// AlertDialog.Builderオブジェクト生成
AlertDialog.Builder ad = new AlertDialog.Builder(this);
// タイトル指定
ad.setTitle("選択して下さい");
// アイコン指定
ad.setIcon(R.drawable.ic_launcher);
// 単一選択アイテムのリスト状態を管理
selectnum = -1;
ad.setSingleChoiceItems(dspfiles, selectnum, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// タップされた位置(which)で要素の値を取得
// File dspFile = new File(files[which]);
result_item = edit_path + dspfiles[which];
// Log.v("dspFile= ",""+result_item +" "+dspfiles[which]);
} });
//////////////////////////////////////////// 肯定的な意味を持つボタンを設定
ad.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// PositiveButto押下時の処理を記述します。
//edit
TextView tv3 = (TextView) findViewById(R.id.textView3);
tv3.setText(result_item);
onResume();
}
});
ad.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
ad.show();
}
@SuppressWarnings("deprecation")
public void button2action(View view){
//データベースヘルパーのインスタンスを作成する
DatabaseHelper dbHelper = new DatabaseHelper(this);
//データベースオブジェクトを取得する 書き込み可能 で
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = null;
int i;
cursor = db.query( "ktable",new String { "_id", "seanno" , "narabino" , "kjp" , "ken" , "knote" },null, null, null, null, null );
//データ数取得
int numRows = cursor.getCount();
//一番最初のデータの位置に移動
cursor.moveToFirst();
//entriesと言うテーブルをデータ数の分だけ作る
final int inp_id = new int[numRows];
final int inp_seanno = new int[numRows];
final int inp_narabino = new int[numRows];
final String inp_kjp = new String[numRows];
final String inp_ken = new String[numRows];
final String[] inp_knote = new String[numRows];
//データセット 2カラム目のsnameをセット
for( i = 0; i < numRows; i++ ){
inp_id[i] = cursor.getInt(0);
inp_seanno[i] = cursor.getInt(1);
inp_narabino[i]= cursor.getInt(2);
inp_kjp[i]= cursor.getString(3);
inp_ken[i]= cursor.getString(4);
inp_knote[i]= cursor.getString(5);
cursor.moveToNext();
}
//使い終わったら、必ずクローズ
cursor.close();
String filePath = Environment.getExternalStorageDirectory() + "/memo.txt";
File file = new File(filePath);
file.getParentFile().mkdir();
/* try {
//File file = new File(file_name);
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for( i = 0; i < numRows; i++ ){
bw.write(inp_id[i] + "," + inp_seanno[i] + "," + inp_narabino[i] + "," + inp_kjp[i] + "," + inp_ken[i] + "," + inp_knote[i]);
bw.newLine();
}
bw.close();*/
//BufferedWriterを利用してテキスト書き込み
//※FileOutputStreamの第二引数をTrueにすると
//追加書き込みし、Falseにすると上書き作成します。
try {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath, false), "UTF-8"));
for( i = 0; i < numRows; i++ ){
bw.write("key=" + inp_id[i] + "," + inp_seanno[i] + "," + inp_narabino[i]);
bw.newLine();
bw.write("jp=" + inp_kjp[i]);
bw.newLine();
bw.write("en=" + inp_ken[i]);
bw.newLine();
bw.write("note=" +inp_knote[i]);
bw.newLine();
}
//BufferedWriterをクローズするのを忘れないようにする。
bw.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/*
String filePath = Environment.getExternalStorageDirectory() + "/memo.txt";
File file = new File(filePath);
file.getParentFile().mkdir();
FileOutputStream output = this.openFileOutput(filePath,MODE_PRIVATE);
output.write("fffffffffffffffff");
output.close();
/*String filePath = Environment.getExternalStorageDirectory() + "/memo.txt";
File file = new File(filePath);
file.getParentFile().mkdir();
FileOutputStream fos;
try {
fos = new FileOutputStream(file, true); //true 追加 false 上書き
OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
BufferedWriter bw = new BufferedWriter(osw);
for( i = 0; i < numRows; i++ ){
String str = "" + inp_id[i];
bw.write(str);
bw.flush();
}
bw.close();
} catch (Exception e) {
}
*/
};