BufferedReader“未知来源”

时间:2018-03-10 17:37:22

标签: java arraylist bufferedreader

我正在尝试阅读包含产品说明,productCode和productPrice的文件。我有它,所以它将使用每个新行设置Product的变量,直到它等于null:

public class ReadFile {

static ArrayList<Product> products = new ArrayList<Product>();

public static void main(String[] args){

    String line;

    try {
        BufferedReader bufferedReader = new BufferedReader (new FileReader("C:/Users/Tom/Desktop/data.txt"));

        while ((line = bufferedReader.readLine()) != null){
            Product product = new Product();
            product.setDescription(bufferedReader.readLine());
            product.setProductCode(bufferedReader.readLine());
            product.setUnitPrice(Integer.parseInt(bufferedReader.readLine()));
            System.out.println(product);
            products.add(product);
            }
    bufferedReader.close();
    }   
    catch(IOException e){
        System.out.println("File not found.");

}}

但是当我在文件中获取下一个产品时,我遇到了错误(Pear):

Exception in thread "main" java.lang.NumberFormatException: For input string: "Pear"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at controller.ReadFile.main(ReadFile.java:24)

这是文件的设置方式:

Apple /r 01 /r 99 /r Pear /r 02 /r 88

注意:/ r用于表示文件中的新行。

我哪里出错,以便创建新产品,设置信息并重复直到该行等于null?

2 个答案:

答案 0 :(得分:1)

您正在阅读两次产品类型。只需使用line变量的值来设置产品描述。

while ((line = bufferedReader.readLine()) != null){
  // line has already stored information about the Product type.
            Product product = new Product();
            product.setDescription(line); // set value using line variable
            // product.setDescription(bufferedReader.readLine()); // error
            product.setProductCode(bufferedReader.readLine());
            product.setUnitPrice(Integer.parseInt(bufferedReader.readLine()));
            System.out.println(product);
            products.add(product);
            }

答案 1 :(得分:1)

在循环的每次迭代中,您调用readLine() 4次,但您的文件格式似乎只有3行&#34; product&#34;。很明显,您对readLine()的一次调用是多余的。提示:你忽略了它的返回值。