【问题标题】:Writing into text file from ArrayList that has multiple values per ArrayList object (java)从每个 ArrayList 对象(java)写入具有多个值的 ArrayList 文本文件
【发布时间】:2017-10-24 13:56:43
【问题描述】:

我正在尝试将我的 ArrayList 保存到一个文本文件中。但是它的保存格式是错误的。我的代码:

ArrayList<Vehicle> vehs = new ArrayList<Vehicle>();

vehs.add(new Vehicle("QJT123", "Starlet 99", 35.0, 190000));
vehs.add(new PremiumVehicle("TUX132", "BWM 05  ", 90.0, 12000, 100, 10000, 5000));

用于这 2 个的构造函数:

public PremiumVehicle(String vehicleID, String description, double dailyRate, int odometer, int allowance, int serLength, int lastOdo) //subclass

public Vehicle(String vehicleID, String description, double dailyRate, int odometer) //Superclass

这两个都存储在 Vehicle ArrayList 中。保存到文本文件的代码:

private static void saveFile(ArrayList<Vehicle> vehs){
    File fileName = new File("VehicleList.txt");        

    try {
        FileWriter fw = new FileWriter(fileName);
        Writer output = new BufferedWriter(fw);

        for (int i = 0; i < vehs.size(); i++){
            output.write(vehs.get(i).toString() + "\n");
        }

        output.close();

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "I cannot create that file");
    }
}

我在 VehicleList.txt 中的输出:

vehicle ID = QJT123 Description = Starlet 99    Status = A  Daily Rate = 35.0 Odometer reading = 190000vehicle ID = TUX132  Description = BWM 05    Status = A  Daily Rate = 90.0   Odometer reading = 12000 Mileage allowance = 100    service length = 10000  Last Service = 5000

如何在写入新的 ArrayList 对象时添加每个新行,例如:

vehicle ID = QJT123 Description = Starlet 99    Status = A  Daily Rate = 35.0 Odometer reading = 190000
vehicle ID = TUX132 Description = BWM 05    Status = A  Daily Rate = 90.0   Odometer reading = 12000 Mileage allowance = 100    service length = 10000  Last Service = 5000

我尝试过使用vehs.get(i).toString() + "\n",但它似乎不起作用。

【问题讨论】:

  • 我不清楚,你的 2 个对象写在同一行???
  • @ΦXocę웃Пepeúpaツ 是的,在我的文本文件中,都写在一行中。假设在车辆 ID 之前添加一个新行
  • 没有任何意义。用一些代码测试,它工作得很好
  • 你是在其他东西上运行它吗?

标签: java arraylist text-files bufferedreader filewriter


【解决方案1】:

BufferedWriter 有一个newLine() 方法,如果您将output 声明为BufferedWriter,则可以使用它。

private static void saveFile(ArrayList<Vehicle> vehs){
    File fileName = new File("VehicleList.txt"); 


    try {
        FileWriter fw = new FileWriter(fileName);
        BufferedWriter output = new BufferedWriter(fw);

        for (int i = 0; i < vehs.size(); i++){
            output.write(vehs.get(i).toString());
            output.newLine();
        }

        output.close();

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "I cannot create that file");
    }
}

也适用于方法的javadoc:

写一个行分隔符。行分隔符字符串由 系统属性 line.separator,不一定是单一的 换行符('\n')。

【讨论】:

  • \n 应该在他的代码中工作。至少对我有用
  • 依赖于平台。
  • @XtremeBaumer 是的.. 不知何故 \n 不适合我。
  • @Berger 和 \n\r 它应该适用于所有常见的操作系统,对吧?
  • @XtremeBaumer : 确实,\r\n 应该匹配通用系统的新行序列(\r\n\r\n)。
【解决方案2】:

很可能,您的平台不会将 \n 视为换行符 - 这取决于操作系统。

获取正确换行符的一种方法:

String lineSep = System.getProperty("line.separator");

甚至更简单:

String lineSep = System.lineSeparator();

您可以在代码中使用+ lineSep,而不是使用+ "\n"

【讨论】:

  • 甚至更好 System.lineSeparator()
猜你喜欢
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
相关资源
最近更新 更多