为什么这个BufferedReader返回空字符串而不是null?

时间:2013-02-04 20:18:30

标签: java null bufferedreader string

我有一个BufferedReader遍历CSV文件的行;当它到达文件末尾时,它返回以下错误:

Exception in thread "main" java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:992)

如何让读者意识到它到达文件末尾并且输入为空而不是空?我检查了文件,最后一行的末尾没有空格。

代码:

    File filReadMe = new File(inputFile);
    BufferedReader brReadMe = new BufferedReader(new InputStreamReader(new FileInputStream(filReadMe), "UTF-8"));

    try
    {
        String strLine;

        while ((strLine = brReadMe.readLine()) != null)
        {
            System.out.println(strLine);
            //place the line into CsvRecordFactory
            int record = csv.processLine(strLine, input); 
        }
    }
    catch (FileNotFoundException ex) {
        ex.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        //Close the BufferedReader
        try {
            if (brReadMe != null)
                brReadMe.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

4 个答案:

答案 0 :(得分:1)

您可以通过以下方式修改代码:

while ((strLine = brReadMe.readLine()) != null)
{
    if (!strLine.isEmpty()) {
        System.out.println(strLine);
        //place the line into CsvRecordFactory
        int record = csv.processLine(strLine, input); 
    }
}

这样,您的代码将忽略所有空行,而不仅仅是文件末尾的空行。

答案 1 :(得分:1)

问题不在于文件结束。问题是您正在处理一个空白行,就像它不是空白一样。可以想象,这可能发生在任何地方,而不仅仅是EOF之前的最后一行。在开始解析之前检查线条是否空白。

答案 2 :(得分:0)

如果文件的结尾是换行符,请尝试将其退回到上一行的末尾,看看是否仍然出现错误

答案 3 :(得分:0)

尝试给它一个小的 if 条件来检查字符串是否为空。

版本1:检查字符串是否为空

  while ((strLine = brReadMe.readLine()) != null)
    {
          if(!strLine.isEmpty()){
              System.out.println(strLine);
              //place the line into CsvRecordFactory
              int record = csv.processLine(strLine, input); 
          }
    }

我也有代码版本2,它检查字符串是否为数字,否则如果它们是字符或空或其他任何内容,中的代码如果将被忽略

while ((strLine = brReadMe.readLine()) != null)
        {
              if(strLine.matches("\\d+")){
                  System.out.println(strLine);
                  //place the line into CsvRecordFactory
                  int record = csv.processLine(strLine, input); 
              }
        }