将txt文件读入ArrayList的问题

时间:2019-11-01 14:50:55

标签: java arraylist

我正在编写代码以从txt文件中读取一些文本,如下所示:

Car:
     Model: Ford
     Color: Red
     Cost: $123123.91
     Car Type: Sedan
     Towing: Included

Car:
     Model: Mitsubishi
     Color: Yellow
     Cost: $12312.00
     Car Type: Sedan
     Towing: Not Included

Car:
     Model: Honda
     Color: Grey
     Cost: $1231.00
     Car Type: Sedan
     Towing: Not Included

到一个数组列表。但是所有文本都存储在索引位置0。

我希望每个订单都存储在不同的索引位置。

Arraylist的“订单”存储输入到gui中的订单,效果很好。 当按下退出键时,这些命令将被写入文本文件

在下次运行时,当我按下“加载”按钮时,所有订单将从同一文本文件读取到不同的ArrayList'orders2'。

我已经尝试过使用for循环,但是问题似乎出在我将订单读取/存储到文本文件的方式上。

public void save() throws FileNotFoundException {

    PrintWriter pw = new PrintWriter(new FileOutputStream(fileName, false));

    for (Object orderlist : orders) {
        pw.println(orderlist);
    }
    pw.close();
}

public void load() throws FileNotFoundException {

    FileInputStream fileIn = new FileInputStream(fileName);
    Scanner scan = new Scanner(fileIn);
    scan.useDelimiter("  ");
    while (scan.hasNext()) {

        orders2.add(scan.next());
    }

    System.out.println(orders2.get(0));
}

public void actionPerformed(ActionEvent e) {

    if (e.getActionCommand().equals("Exit")) {
        try {
            save();
        } catch (FileNotFoundException f) {
            f.printStackTrace();
        }

        System.exit(0);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
}

1 个答案:

答案 0 :(得分:0)

扫描程序通过标记化您提供的输入流来工作。令牌是由分隔符分隔的事物。您告诉它令牌由两个空格分隔。鉴于您的文本文件在其中的任何地方都不包含2个空格,所以整个内容(从坚果到坚果)都是一个标记。

如果我阅读了您的代码(不完整),就会看到for (Object orderlist : orders):这是不对的。这意味着订单是订单的列表或列表列表。您真的有订单清单吗?数组和列表都不会那样打印,所以我对此表示怀疑。这意味着您的变量名具有误导性,可能是因为您不太了解自己的代码在做什么。此外,使用Object可能不正确。当然,ordersOrder对象或者也许String对象的数组或列表。

更清晰地了解此代码将更易于理解和评论。