有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在保存arraylist之前删除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();
}

这是我的文件扫描程序

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

共 (1) 个答案

  1. # 1 楼答案

    我想我知道你在问什么。您实现了一个toString(),它对控制台打印输出有用,但不用于将数据写入文件。这很好,也不罕见。在代码中,使用toString()是为了提供信息/UI,所以在将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()保存,用其他东西保存