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

标签 java io bufferedreader

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

公司名称电话

产品价格数量

产品价格数量

...

产品价格数量

公司名称电话

产品价格数量

产品价格数量

...

产品价格数量

公司名称 电话 等等等等

按照以下格式,一个公司将比其他公司拥有更多的产品 - 没有模式,只是许多公司拥有不同的产品。

数据将以这种方式使用:

  1. 读取第一行(公司名称、电话)并初始化供应商对象。
  2. 读取每一行,直到检测到新的(公司名称电话)或特定字符(例如,;或其他字符),并为每一行初始化一个 Product 类型的对象(包含产品名称和价格)并将其添加到通过 <Product, quantity> 新创建的供应商对象 map 容器。
  3. 所以最终Supplier对象将有一个Map <Product, quantity>每个Product price quantity检测到线路,然后将按照相同的逻辑初始化新的供应商。

我制作了一次读取 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 不太了解。谢谢!

最佳答案

了解何时到达供应商末尾的一种方法是在循环开始时检查一个唯一的字符或字符串,如果相等则添加供应商。您也可以只知道带有电话号码的产品数量。

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 时我认为这是一个电话#。

关于java - Java从txt文件中读取数据,使用特定字符作为每次迭代的结束点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453702/

相关文章:

java - 使 BufferedReader 不等待 Process 完成

java - 为什么我的字符串返回 "\ufffd\ufffdN a m e"

java - BufferedReader.readLine() 等待来自控制台的输入

java - Swagger 处理多个基本路径

java - 来自注释的 Swagger 示例帖子正文

java - bufferedReader 关闭文件

c - 如何处理基于 C 的应用程序内部的数据流?

java - 在按下另一个 Activity 的按钮时清除 recyclerview

java - Hazelcast - 在客户端/服务器模式下为多个应用程序提供服务的最佳集群拓扑是什么?

c# - 我可以直接在 C# 中将存储为字符串的二进制文件写入二进制文件吗?