1

私はいくつかのレコードを持つファイル DataFile.txt を持っています。新しいエントリを追加すると、他のすべてのレコードがクリアされ、新しいレコードのみが保存されます。しかし、私はそのレコードを追加したいです。

private void saveFile()
      {
        try
        {
            PrintWriter out = new PrintWriter(new FileWriter("DataFile.txt"));


            String name ="";
            String ID="";
            String roomType ="";
            String meal="";
            int days=0;
            int tprice=0;


            for (int i = 0; i < myList.size(); i++)
            {
                Customer c = myList.get(i);

                name = c.getName();
                ID = c.getID();
                roomType = c.getRoomItem();
                meal = c.getMealItem();
                days = c.getDaysIndex();
                tprice = c.getTotalPrice();

                out.println(name + "," + ID+ "," + roomType+ "," + meal+ "," + days+ "," + tprice);
            }
            out.close();
            JOptionPane.showMessageDialog(null,"Data saved successfully!","",
                                                              JOptionPane.INFORMATION_MESSAGE);

          }
          catch (Exception ex)
          {
             System.out.println("save file fail");
          }
      } //end of the method

ありがとう。

4

2 に答える 2

4

appendブール値パラメーターを取る FileWriter コンストラクターを使用するように変更できます。

PrintWriter out = new PrintWriter(new FileWriter("DataFile.txt", true));

でも:

  • PrintWriter例外を飲み込む - 私があなただったら、私はそれを使用しません
  • FileWriter常にプラットフォームのデフォルトのエンコーディングを使用します-私もそれを使用しません。特定のエンコーディングで作成されたOutputStreamラップされたを使用します。OutputStreamWriter
于 2012-04-25T10:31:18.987 に答える
0

FileWriter を使用しないでください。FileWriter で文字エンコーディングを定義することはできず、システムのデフォルトのエンコーディングを使用することになりますが、これは通常、使用したいものではありません。

代わりに、FileOutputStream と OutputStreamWriter を使用してください。はい、これは余分なコード行ですが、堅牢でバグのないコードを書きたい場合は、その余分な行が必要です。

OutputStream out = new FileOutputStream("output.txt", true);
Writer writer = new OutputStreamWriter(out, "UTF-8");

システムのデフォルトの文字エンコーディングの使用は、バグの最も一般的な原因です。システムの既定の文字エンコード (またはシステムの既定のタイム ゾーン) に依存しないことを習慣化してください。

于 2012-04-25T11:01:53.617 に答える