使用Java中的txt文件读取数据,使用特定字符作为每次迭代的终点

时间:2016-11-06 19:41:01

标签: java io bufferedreader

我想从.txt文件中读取数据,该文件包含初始化名为Supplier的类的对象的信息。该文件将具有以下格式,每行如下所示:

公司名称电话

产品价格数量

产品价格数量

...

产品价格数量

公司名称电话

产品价格数量

产品价格数量

...

产品价格数量

公司名称电话 等等。

采用以下格式,一家公司的产品数量将超过其他公司 - 没有模式,只有许多公司拥有不同的产品。

数据将以这种方式使用:

  1. 阅读第一行(公司名称电话)并初始化对象供应商。
  2. 读取每一行,直到检测到新的(公司名称电话)或特定字符(例如,;或某物),并为每行初始化Product类型的对象(带有Productname和price)并将其添加到通过<Product, quantity>新创建的供应商对象地图容器。
  3. 因此,最终,Supplier对象将检测到每<Product, quantity>行的地图Product price quantity,然后按照相同的逻辑初始化新的供应商。
  4. 我让方法一次从1行读取并添加所有信息,但它是硬编码的,并且不适用于不同数量的<Product price quantity>序列。 :(

    这是我的代码,但正如我所说,它一次只能从一行读取,而且我不能添加超过1 <Product, quantity>对。

    Orders(String suppliersFileName) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader(suppliersFileName)); 
        String line;
        while((line = in.readLine()) != null)
        {
            String[] vars = line.split(" ");
            suppliers.addElement(new Supplier(vars[0], vars[1], vars[2], vars[3], Double.parseDouble(vars[4]), Integer.parseInt(vars[5])));
        }
        in.close();
    }
    

    我将不胜感激任何帮助,因为我对BufferedReaders了解不多。谢谢!

1 个答案:

答案 0 :(得分:1)

了解何时到达供应商末尾的一种方法可能是通过在循环开始时检查一个唯一的字符或字符串,如果它相等,则添加供应商。您也可以使用手机#。

获得多少产品
String endOfSupplier = "!"; // this can be any thing
while((line = in.readLine()) != null){
    if (line.equals(endOfSupplier)){ // end of supplier
        suppliers.add(supplier); // add supplier to suppliers
        supplier = null; // set to null to show that we are done with it
    }
    if (supplier == null){ // make new supplier when it's null
        supplier = new Supplier(line); // parse phone # to supplier
    }
    else {
        supplier.addProduct(line); // make method that turns string into product and add it to supplier
    }
}

当我将供应商添加到列表中时,我将供应商等于null,这样我就可以判断我是在阅读手机#还是产品,因为当它等于null我假设它是一部电话#。