为什么bufferedreader和扫描仪的输出不同?

时间:2013-11-05 06:12:14

标签: java java.util.scanner bufferedreader

我使用过两个文件读取类,scan和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;
            }

1 个答案:

答案 0 :(得分:1)

尝试一下它会起作用。

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

你正在读东西两次。