#問題
サンプル1やサンプル2を元に、テキストファイルへ追記し続けるサンプルを作成してみたのですが、ファイルの新規作成のみで追記されません。
ファイルが存在すると変更されず、一度ファイルを削除すると新規に項目が一つ保存されたファイルが作成されます。
(例)ボタンを3回押してから"testfile.txt"を削除して、ボタンを押すと”testfile.txt"が作成されて中身は「test3」だけが保存される。
この後にボタンを押しても中身は変わらない。
FileOutputStream fos = new FileOutputStream(file,true); // 追記
だけでは追記されないのでしょうか?
##環境
開発環境:AndroidStudio 3.0.1
実機:Android 6.0
#やりたいこと
ファイルの追記が出来る様にしたいです。
#ソースコード
java
1 2public class MainActivity extends AppCompatActivity { 3 4 private static final int REQUEST_EXTERNAL_STORAGE = 1; 5 private static String[] PERMISSIONS_STORAGE = { 6 Manifest.permission.READ_EXTERNAL_STORAGE, 7 Manifest.permission.WRITE_EXTERNAL_STORAGE 8 }; 9 10 public static void verifyStoragePermissions(Activity activity) { 11 int writePermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 12 int readPermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE); 13 14 if (writePermission != PackageManager.PERMISSION_GRANTED || readPermission != PackageManager.PERMISSION_GRANTED) { 15 ActivityCompat.requestPermissions( 16 activity, 17 PERMISSIONS_STORAGE, 18 REQUEST_EXTERNAL_STORAGE 19 ); 20 } 21 } 22 23 // メディアスキャン 24 final MediaScannerConnection.OnScanCompletedListener mScanCompletedListner = new MediaScannerConnection.OnScanCompletedListener() 25 { 26 @Override 27 public void onScanCompleted(String path, Uri uri) 28 { 29 } 30 }; 31 32 private TextView textView; 33 private String fileName = "testfile.txt"; 34 private int intRaw = 0; 35 36 @Override 37 protected void onCreate(Bundle savedInstanceState) { 38 super.onCreate(savedInstanceState); 39 setContentView(R.layout.activity_main); 40 verifyStoragePermissions(this); 41 42 textView = findViewById(R.id.text_view); 43 44 Button buttonSave = findViewById(R.id.button_save); 45 buttonSave.setOnClickListener(new View.OnClickListener() { 46 @Override 47 public void onClick(View v) { 48 String strFileName = Environment.getExternalStorageDirectory().getPath() + "/" + fileName; // 内部ストレージ直下 49 String text = "test" + intRaw; // 保存する内容 50 51 saveFile(strFileName, text); 52 if(text.length() == 0){ 53 textView.setText(R.string.no_text); 54 } 55 else{ 56 textView.setText(R.string.saved); 57 } 58 59 String[] paths = {strFileName}; 60 MediaScannerConnection.scanFile(getApplicationContext(), paths, null, mScanCompletedListner); 61 62 intRaw++; 63 } 64 }); 65 } 66 67 // ファイルを保存 68 public void saveFile(String file, String str) { 69 try { 70 FileOutputStream fos = new FileOutputStream(file,true); // 追記 71 OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); 72 BufferedWriter bw = new BufferedWriter(osw); 73 bw.write(str); 74 bw.newLine(); // 改行 75 bw.flush(); 76 bw.close(); 77 Log.i("MainActivity","Saved:" + str); 78 } catch (FileNotFoundException e) { 79 Log.d("MainActivity", e.toString()); 80 } catch (IOException e) { 81 Log.d("MainActivity", e.toString()); 82 } 83 } 84} 85
#テスト結果の追記
確認方法に「USB接続しているWindowsPCでファイルを見ている」ことを記述していませんでした。
出力ファイルをWindowsPCで確認したところ、
・スマホを再起動すれば「testfile.txt」の中身は反映される。
・但しnewLine()
(改行)は適用されていない
MediaScannerConnection.scanFile()
だけでは中身までWindows PCで見れる様にならないのでしょうか?
もしくは使い方が間違っているのでしょうか?
回答1件
あなたの回答
tips
プレビュー