プログラム学習室 http://studyhallweb.com/

Dart言語: テキストファイルの書き込み

openWrite( ), writeAsStringSync( )

openWrite( ) でファイルを開いて、writeAsStringSync( ) で書き込む。(writeAsSrting( )もあるが特に必要がなければSyncのほうが扱いやすい)
writeAsStringSync( ) はデフォルトで WRITE(上書き)モードになっているようで、openWrite( ) で APPENDを指定していてもwriteAsStringSync( ) のモードを指定しないと WRITE モードで書かれてしまう。(下の Test1 参照)
import 'dart:io';

class C_ReadFile {
  int read(String sPath, [int nMode = 0]) {
    try {
      List<String> sReadFile = new List();
      File oFile = new File(sPath);
      sReadFile = oFile.readAsLinesSync();

      if (nMode == 1) {
        // nMode 1  のとき、内容表示
        String sBuff;
        for (int i = 0; i < sReadFile.length; i++) {
          sBuff = (i+1).toString() + ': ' + sReadFile[i];
          print(sBuff);
        }
      }
    } on Exception catch(e) {
      return -1;
    } catch(e) {
      return -2;
    }
    return 0;
  }
}

void main() {
  int iErr = 0;  // Error code
  C_ReadFile cFread = new C_ReadFile();
  String sFile = 'write.txt';

  File oFile = new File(sFile);
  try {
    if (oFile.existsSync()) oFile.deleteSync();

    print('Test1 openWrite(APPEND) + wrteAsStringSync()');
    oFile.openWrite(mode: FileMode.APPEND);
    oFile.writeAsStringSync('1st line\r\n');
    oFile.writeAsStringSync('2nd line\r\n');
      // APPEND で開いても  WRITE 書き込まれ '1st line' は上書きされてしまう
    if(cFread.read(sFile, 1) != 0) throw 'Read Error';

    print('\nTest2 openWrite(WRITE) + wrteAsStringSync(APPEND)');
    oFile.openWrite(mode: FileMode.WRITE);
    oFile.writeAsStringSync('1st line\r\n', mode: FileMode.APPEND);
      // oprnWrite(WRITE)により、新規書き込みになる
    oFile.writeAsStringSync('2nd line\r\n', mode: FileMode.APPEND);
    if(cFread.read(sFile, 1) != 0) throw 'Read Error';

    print('\nTest3 openWrite(APPEND) + wrteAsStringSync(APPEND)');
    oFile.openWrite(mode: FileMode.APPEND);
    oFile.writeAsStringSync('1st line\r\n', mode: FileMode.APPEND);
      // oprnWrite(APPEND)に、APPENDで書き込みし追記される
    oFile.writeAsStringSync('2nd line\r\n', mode: FileMode.APPEND);
    if(cFread.read(sFile, 1) != 0) throw 'Read Error';

  } on Exception catch(e) {
    iErr = -1;
    print(e);
  } catch(e) {
    iErr = -2;
    print(e);
  } finally {
    // print('\nEnd $iErr');
  }
}				

出力
Test1 openWrite(APPEND) + wrteAsStringSync()
1: 2nd line

Test2 openWrite(WRITE) + wrteAsStringSync(APPEND)
1: 1st line
2: 2nd line

Test3 openWrite(APPEND) + wrteAsStringSync(APPEND)
1: 1st line
2: 2nd line
3: 1st line
4: 2nd line