2016-12-09 3 views
-1

次の手順を行っていますが、元のファイルを保存する際に問題が発生しています。オブジェクトへArraylistを保存する前にStringBuilderを追加します。

  1. 読むファイル
  2. ファイル 繰り返し保存
  3. をコンソールに印刷用
  4. オーバーライドtoStringメソッドをArrayListにオブジェクトを追加します。

ファイルのレイアウトが変更されたため、問題が繰り返されています。私はすべての付加なしでファイルに印刷する方法を見つけようとしています。

私は読んでいる間は単語を無視し、保存する前に単語を削除しようとしました。どちらも本当に乱雑で紛らわしいようでした。ここで

は私のStringBuilderである:ここでは

@Override 
public String toString() { 
    StringBuilder builder = new StringBuilder(); 
    builder.append("Room Number: ").append(roomNumber); 
    builder.append(", Room Type: ").append(roomType); 
    builder.append(", Room Price: £").append(format.format(roomPrice)); 
    builder.append(", Room Balcony: ").append(roomBalcony); 
    builder.append(", Room Lounge: ").append(roomLounge); 
    builder.append(", Room Reserved by: ").append(reservedBy); 
    builder.append("\n"); 
    return builder.toString(); 
} 

は私filescanner

 while (file.hasNextLine()) { 
     int roomNumber = file.nextInt(); 
     String roomType = file.next(); 
     double roomPrice = file.nextDouble(); 
     boolean roomBalcony = file.nextBoolean(); 
     boolean roomLounge = file.nextBoolean(); 
     String reservedBy = file.next(); 
     roomList.add(new Room(roomNumber, roomType, roomPrice, roomBalcony, roomLounge, reservedBy)); 
    } 
+3

問題を説明するのを忘れました。 – shmosel

+0

問題が本当に不明です。ファイルの書き込み、ファイルの読み込み、またはその内容のコンソールへの印刷(選択)について質問していますか? [他の方法で文字列をフォーマットする方法](http://stackoverflow.com/questions/6431933/how-to-format-strings-in-java)をお探しですか? XMLなどのファイル形式をお探しですか?ここの問題は何ですか? –

+0

@ JasonCは追加なしでファイルを保存するのに苦労していましたが、これを行うためのいくつかの異なる方法を検討しました。2回目にファイルを読み込もうとしているときに問題が発生し、保存によってレイアウトが変更されました。 – DMck

答えて

0

である私は、私はあなたが求めているものを知っていると思います。 toString()を実装しました。コンソールのプリントアウトには便利ですが、ファイルにデータを書き込むには便利です。これは上品で、珍しいことではありません。あなたのコードでは、有益な/ UIの目的のためにtoString()を使用していますので、ファイルに保存する際にはtoString()を使用しないでください。

ちょっと...別の方法でファイルに保存してください。それはかなりシンプルです。

あなたは、たとえば同じように、あなたが保存することができ、文字列を構築する機能を追加することができ

public String toFileString() { 
    return the line you'd write to a file; 
} 

その後

ArrayList<MyThings> things = ...; 

for (MyThing thing : things) 
    outputFile.println(thing.toFileString()); 

それとも、PrintWriter(または一部への書き込み機能を書くことができ他のWriterでも、PrintWriterには多くの便利な方法があります)。例えば、

void saveTo (PrintWriter out) { 
    // print a line to out 
} 
次に

for (MyThing thing : things) 
    thing.saveTo(outputPrintWriter); 

それともあなたが作ることができ、あなたのオブジェクトは、すべてのファイルの知識がないと、保存するときだけではなく、明示的にそのようなものを書き出す:

for (MyThing thing : things) { 
    out.print(thing.getRoomNumber()); 
    // and so on... 
} 

または何を。何百万ものオプションがありますが、何か別のものを除けば、toString()で保存しないでください。

+0

本当に有益な答え、ありがとう!私はそれを今すぐに2番目のオプションに向かって傾けて、それを与えます。私はあなたに戻って、私がすぐにどのようになったのかを教えてあげます。 – DMck

+0

saveが呼び出されると、ファイルが消去されてしまいます。 ファンクション:\t void saveTo(PrintWriter out)throws FileNotFoundException { \t \t PrintWriter save = new PrintWriter(new FileOutputStream( "rooms.txt")); \t save.println(roomNumber + "" + roomType + "" + roomPrice + "" + roomBalcony + "" + roomLounge + "" + reservedBy); \t} そして、このように使用しようとしています。 \t \t(部屋R:roomList)用{ \t \t r.saveTo(保存);} は単にファイルを完全に拭き取り、エラーを与えていません。 – DMck

+0

@DMckオブジェクトを保存するたびに新しいファイルを開くと、そのファイルを期待する必要があります。 'PrintWriter out'を' saveTo'に渡しているので、それを使用してください。新しい 'PrintWriter'を作成したり、毎回新しいファイルを開いたりしないでください。一度やって 'saveTo'に渡してください。 –

関連する問題