0

テキスト ファイルに書き込むたびに元のデータが失われます。ファイルを読み取って、空の行または次の空の行にデータを入力するにはどうすればよいですか?

public void writeToFile()
{   

    try
    {
        output = new Formatter(myFile);
    }
    catch(SecurityException securityException)
    {
        System.err.println("Error creating file");
        System.exit(1);
    }
    catch(FileNotFoundException fileNotFoundException)
    {
        System.err.println("Error creating file");
        System.exit(1);
    }

    Scanner scanner = new Scanner (System.in);

    String number = "";
    String name = "";

    System.out.println("Please enter number:");
    number = scanner.next();

    System.out.println("Please enter name:");
    name = scanner.next();

    output.format("%s,%s \r\n",  number, name);
    output.close();

}
4

4 に答える 4

3

append のためにファイルを開く必要があります。

于 2009-08-12T15:33:51.523 に答える
1

他の人が言ったように、追加オプションを使用してください。

このコードは、デフォルトのプラットフォーム エンコーディングでデータを書き込むことができます。

  private static void appendToFile() throws IOException {
    boolean append = true;
    OutputStream out = new FileOutputStream("TextAppend.txt", append);
    Closeable resource = out;
    try {
      PrintWriter pw = new PrintWriter(out);
      resource = pw;
      pw.format("%s,%s %n", "foo", "bar");
    } finally {
      resource.close();
    }
  }

同じ効果を得るために、 OutputStreamをラップできるクラスがいくつかあります。Unicode の既定のエンコーディングを使用しないプラットフォーム (Windows など) でコードを実行すると、上記のアプローチではデータが失われる可能性があり、別の PC では別の出力が生成される可能性があることに注意してください。

注意が必要なケースの 1 つは、エンコーディングでバイト オーダー マークが挿入される場合です。UTF-16リトルエンディアン BOMでマークされた可逆 Unicode テキストを書きたい場合は、既存のデータのファイルをチェックする必要があります。

private static void appendUtf16ToFile() throws IOException {
  File file = new File("TextAppend_utf16le.txt");
  String encoding = (file.isFile() && file.length() > 0) ?
      "UnicodeLittleUnmarked" : "UnicodeLittle";
  boolean append = true;
  OutputStream out = new FileOutputStream(file, append);
  Closeable resource = out;
  try {
    Writer writer = new OutputStreamWriter(out, encoding);
    resource = writer;
    PrintWriter pw = new PrintWriter(writer);
    resource = pw;
    pw.format("%s,%s %n", "foo", "bar");
  } finally {
    resource.close();
  }
}

サポートされているエンコーディング:

于 2009-08-12T18:07:49.623 に答える
1

myFile追加モードで開く必要があります。例については、このリンクを参照してください。

于 2009-08-12T15:33:59.603 に答える
0

私たちはあなたが持っています:new Formatter(myFile);あなたは使いたいと思うでしょうnew Formatter(new FileWriter(myfile, true). true は、そのファイルに追加することを示します。

于 2009-08-12T15:35:57.510 に答える