【问题标题】:BufferedReader "Unknown Source"BufferedReader“未知来源”
【发布时间】:2018-03-10 17:37:22
【问题描述】:

我正在尝试读取包含产品描述、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?

【问题讨论】:

    标签: java arraylist bufferedreader


    【解决方案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);
                }
    

    【讨论】:

      【解决方案2】:

      在循环的每次迭代中,您调用 readLine() 4 次,但您的文件格式似乎每个“产品”只有 3 行。显然,您拨打readLine() 的电话是多余的。提示:它是你忽略的返回值。

      【讨论】:

        猜你喜欢
        • 2018-01-15
        • 1970-01-01
        • 2013-01-30
        • 2018-04-21
        • 2015-01-14
        • 2014-02-11
        • 2014-12-24
        • 2016-05-04
        • 2015-04-06
        相关资源
        最近更新 更多