从Java中的txt文件中读取数据,使用特定的字符作为每次迭代的终点
Reading data from a txt file in Java, using a specific character to be the end point of each iteration
我想从 .txt 文件中读取数据,该文件包含用于初始化名为 class 的供应商的对象的信息。该文件将具有以下格式,每一行如下所示:
公司名称Phone
产品价格数量
产品价格数量
.....
产品价格数量
公司名称Phone
产品价格数量
产品价格数量
.....
产品价格数量
公司名称Phone
等等等等
在以下格式中,一家公司的产品会比另一家多 - 没有模式,只有许多公司有不同的产品。
数据将以这种方式使用:
- 读取第一行(公司名称Phone)并初始化对象供应商。
- 读取每一行,直到检测到新的(公司名称 Phone)或特定字符(如 , ; 或其他字符),并为每个初始化一个 Product 类型的对象(带有 Productname 和 price)通过
<Product, quantity>
行并将其添加到新创建的 Supplier 对象 Map 容器中。
- 所以最终 Supplier 对象将有一个 Map
<Product, quantity>
每个检测到的 Product price quantity
行,然后将按照相同的逻辑初始化一个新的 Supplier。
我制作了一次从 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 了解不多。谢谢!
了解何时到达供应商末尾的一种方法是在循环开始时检查一个唯一的字符或字符串,如果相等则添加供应商。您也可以只获得带有 phone #.
的产品数量
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
,这样我就可以判断我是在阅读 phone # 还是产品,因为当它等于 null
我以为是 phone #.
我想从 .txt 文件中读取数据,该文件包含用于初始化名为 class 的供应商的对象的信息。该文件将具有以下格式,每一行如下所示:
公司名称Phone
产品价格数量
产品价格数量
.....
产品价格数量
公司名称Phone
产品价格数量
产品价格数量
.....
产品价格数量
公司名称Phone 等等等等
在以下格式中,一家公司的产品会比另一家多 - 没有模式,只有许多公司有不同的产品。
数据将以这种方式使用:
- 读取第一行(公司名称Phone)并初始化对象供应商。
- 读取每一行,直到检测到新的(公司名称 Phone)或特定字符(如 , ; 或其他字符),并为每个初始化一个 Product 类型的对象(带有 Productname 和 price)通过
<Product, quantity>
行并将其添加到新创建的 Supplier 对象 Map 容器中。 - 所以最终 Supplier 对象将有一个 Map
<Product, quantity>
每个检测到的Product price quantity
行,然后将按照相同的逻辑初始化一个新的 Supplier。
我制作了一次从 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 了解不多。谢谢!
了解何时到达供应商末尾的一种方法是在循环开始时检查一个唯一的字符或字符串,如果相等则添加供应商。您也可以只获得带有 phone #.
的产品数量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
,这样我就可以判断我是在阅读 phone # 还是产品,因为当它等于 null
我以为是 phone #.