ともちゃんのアプリ開発日記

組込みC言語プログラマだったともちゃんが、四苦八苦しながら、AndroidのJAVA/Kotlin、iOSのSwiftUIを習得して行きます。ともちゃんの備忘録も兼ねています。

データファイルの書き出しとファイル添付

1.マニフェスト

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

 2.ソースコード

public static class FileIO {

private final String EXPORT_FILE ="DietRecData.csv";

public FileIO () {
}

public void exportFile (Context context) {

String dir1 = Environment.getExternalStorageDirectory().getPath() + "/Android/data/"+ context.getPackageName();
File fDir1 = new File(dir1);
if (!fDir1.exists()) {
boolean result = fDir1.mkdir();
if (!result) {
Toast.makeText(context, "フォルダ作成失敗", Toast.LENGTH_LONG).show();
return;
}
}

String dir2 = dir1 + "/files";
File fDir2 = new File(dir2);
if (!fDir2.exists()) {
boolean result = fDir2.mkdir();
if (!result) {
Toast.makeText(context, "フォルダ作成失敗", Toast.LENGTH_LONG).show();
return;
}
}

String filePath = dir2 + "/" + EXPORT_FILE;
File dstFile = new File(filePath);
OutputStream outputFile ;
try {
outputFile = new FileOutputStream(dstFile);
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputFile, "UTF-8"));
writer.append("Diet Rec\n");
writer.append("データファイルバージョンコード=1\n");
writer.close();
} catch (FileNotFoundException e) {
Toast.makeText(context, "ファイルをオープン出来ませんでした。",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(context, "ファイルに書き込み出来ませんでした。", Toast.LENGTH_SHORT).show();
}

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setData(Uri.parse("mailto:"));
intent.putExtra(Intent.EXTRA_SUBJECT, "Diet Rec データ");
// CSVファイルを添付
intent.setType("text/plain");
String filePath2 = "file://" + filePath;
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(filePath2));
context.startActivity(intent);

}
}

 

 フォルダは1階層ごとに作成しないと、エラーになります。