Java 在保存arraylist之前删除StringBuilder附件

Java 在保存arraylist之前删除StringBuilder附件,java,stringbuilder,filewriter,Java,Stringbuilder,Filewriter,我正在执行以下步骤,在保存原始文件时遇到问题 将文件读取到对象 将对象添加到arraylist 覆盖用于打印到控制台的toString方法 保存文件 重复一遍 由于文件布局现在已更改,此问题正在重复。我正在试图找到一种方法来打印文件,而不需要所有的附件 我研究了两种不同的方法,在阅读时忽略单词,在保存之前尝试删除单词。这两件事看起来都很混乱 这是我的StringBuilder: @Override public String toString() { StringBuilder

我正在执行以下步骤,在保存原始文件时遇到问题

  • 将文件读取到对象
  • 将对象添加到arraylist
  • 覆盖用于打印到控制台的toString方法
  • 保存文件 重复一遍 由于文件布局现在已更改,此问题正在重复。我正在试图找到一种方法来打印文件,而不需要所有的附件

    我研究了两种不同的方法,在阅读时忽略单词,在保存之前尝试删除单词。这两件事看起来都很混乱

    这是我的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();
    }
    
    这是我的文件扫描程序

            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));
        }
    

    我想我知道你在问什么。您实现了一个
    toString()
    ,它对控制台打印输出有用,但不用于将数据写入文件。这很好,也不奇怪。在代码中,使用
    toString()
    是为了提供信息/UI,因此在将其保存到文件时,只需不使用
    toString()

    所以就。。。以另一种方式将其保存到文件中。就这么简单

    例如,您可以添加一个函数,该函数生成一个可以保存的字符串,如:

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

    然后:

    或者,您可以使对象完全不了解文件,而只是在保存时显式写出其内容:

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

    或者别的什么。有一百万个选项,重点是,不要用
    toString()
    保存,用其他东西保存。

    你忘了解释这个问题。真的不清楚问题出在哪里。您是否询问写入文件、读取文件或将其内容打印到控制台(选择一个)?你在找什么?您是否正在寻找其他文件格式,如XML或其他格式?这里的问题是什么?@JasonC正在努力保存没有附加的文件,但研究了几种不同的方法。当我第二次尝试读取文件时出现问题,并且保存更改了布局。非常有用的回答,非常感谢!我会尝试一下,现在更倾向于第二种选择。我会尽快回复你们,让你们知道我的进展。调用save时,文件将被删除。函数:void saveTo(PrintWriter out)抛出FileNotFoundException{PrintWriter save=new PrintWriter(new FileOutputStream(“rooms.txt”);save.println(roomNumber+“”+roomType+“”+roomPrice+“”+roombaround+“”+roomLounge+“”+reservedBy);},然后尝试这样使用它。对于(Room r:roomList){r.saveTo(save);}没有给出任何错误,只是完全擦除了文件。@DMck如果每次保存对象时都打开一个新文件,应该会这样。您正在将
    PrintWriter out
    传递到
    saveTo
    ,因此请使用它。不要每次都创建一个新的
    PrintWriter
    或打开一个新文件。只需执行一次并将其传递给
    saveTo
    。解决了问题(java初学者,非常抱歉)。正在尝试删除保存结束时的空行。把你的答案记下来,谢谢。
    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...
    }