java - 为什么bufferedreader和scanner的输出不同?

标签 java java.util.scanner bufferedreader

我使用了两个文件读取类,scanner 和 bufferedReader。在阅读代码时,您必须避免其中之一的部分。我把它们写在一起只是为了便于理解。现在的问题是为什么我在使用缓冲读取器而不是扫描器类来处理此代码时出现错误。扫描仪可以正常使用此代码。我在 parseRecord 方法中收到异常错误。在这段代码中,我试图解析 csv,我有几个类正在使用它的输出,但我被困在这里,想知道为什么 bufferedReader 的工作方式与扫描仪不同。

    public List<? extends ReportRecord> load() throws Exception {

    List<SportPopularityReportRecord> records=new ArrayList<SportPopularityReportRecord>();

    //  first way using buffered reader, please ignore the scanner part below.
    BufferedReader br;
    try {
    br= new BufferedReader(new FileReader(filePath.toString()));
    String line=br.readLine();
    if ((line = br.readLine()) != null) 
    {
        parseHeader(line);
    }

    while(line != null)
    {

        line= br.readLine();
        records.add(parseRecord(line));

    }

    }
    catch (FileNotFoundException ex) 
    {
      ex.printStackTrace();
    } 
    catch (IOException ex) 
    {
        ex.printStackTrace();

    } 
    finally
    {
           br.close();
           // fis.close();

        }
    }
    // Second way using scanner class, please ignore the buffered reader part above.

    String s;
    Scanner sc=new Scanner(filePath.toFile());

    //getting header
    if(sc.hasNextLine()){
        s=sc.nextLine();    
        parseHeader(s);
    }


    //getting recored
    while(sc.hasNextLine()){
        s=sc.nextLine();
        records.add(parseRecord(s));
    }



    //sort the record



    Collections.sort(records, new SportPopularityReportRecordComparator());

    recordList=records;

    //return record List
    return recordList;

         }

           public SportPopularityReportRecord parseRecord(String strRecord) {
        String [] s=strRecord.split(",");
    SportPopularityReportRecord r=new    SportPopularityReportRecord();
                    r.setSport(s[0]);
                    r.setRank(Integer.parseInt(s[1]));
return r;
            }

最佳答案

试试这个,它会起作用。

String line=br.readLine();
if (line != null) 
{
    parseHeader(line);
}

您正在阅读两遍内容。

关于java - 为什么bufferedreader和scanner的输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782927/

相关文章:

java - 按钮对 Wear OS 应用程序中的任何事件没有反应

java - 如何将 Javascript 中的日期与语言环境进行比较

java - 如何设置不是模拟bean的bean的字段

Java 扫描器和 if-else 语句

java - BufferedReader 从未就绪(Java 中的 Socket 编程)

java - java awt中设置光标位置

java - 使用扫描仪处理用户输入

java - 如何让扫描仪对象要求超过 1 个 int?

java - 使用 Java IO 搜索并打印特定行

java - BufferedReader 未返回