2016-12-09 32 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'。 –