2016-12-09 31 views
-1

我正在經歷以下步驟,並且在保存原始文件時遇到問題。在保存數組列表之前刪除StringBuilder

  1. 讀取文件的對象
  2. 對象添加到ArrayList中
  3. 覆蓋toString方法用於打印到控制檯
  4. 保存文件 重複。

由於文件佈局現在已經改變,因此問題在重複。我試圖找到一種方法來打印到文件沒有所有的附加。

我研究了兩種不同的方式,在閱讀時忽略單詞,並試圖在保存之前刪除單詞。這兩個看起來都很混亂和混亂。

這裏是我的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努力保存文件沒有附加,但看看幾種不同的方式來做到這一點。由於當我第二次嘗試讀取文件時發生問題,並且保存已更改佈局。 – DMck

回答

0

我想我知道你在問什麼。您實現了一個toString(),這對控制檯打印輸出非常有用,但不適用於將數據寫入文件。這很好,並不罕見。在你的代碼中,你使用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函數(或一些其他WriterPrintWriter有很多方便的方法),例如:

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

非常翔實的答案,非常感謝!我會放棄它,目前更傾向於第二種選擇。我會盡快回復你,讓我知道我很快就會到達。 – DMck

+0

當保存被調用時,文件正在結束擦除。 功能:\t void saveTo(PrintWriter out)拋出FileNotFoundException {0128} \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'。 –