1

CSVファイルの行を反復処理するBufferedReaderがあります。ファイルの最後に到達すると、次のエラーが返されます。

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

リーダーにファイルの終わりに到達し、入力が空ではなくnullであることを認識させるにはどうすればよいですか?ファイルを確認しましたが、最後の行の終わりに空白がありません。

コード:

    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

4 に答える 4

1

問題はファイルの終わりではありません。問題は、空白行を空白ではないかのように処理していることです。これは、EOF の前の最終行だけでなく、どこでも発生する可能性があります。解析を開始する前に、行が空であることを確認してください。

于 2013-02-04T22:48:31.233 に答える
1

この方法でコードを簡単に変更できます。

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

このように、コードはファイルの最後の行だけでなく、すべての空行を無視します。

于 2013-02-04T20:27:55.363 に答える
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); 
              }
        }
于 2013-02-04T20:33:54.770 に答える
0

ファイルの最後が改行である場合は、前の行の最後までバックスペースしてみて、それでもエラーが発生するかどうかを確認してください。

于 2013-02-04T20:23:07.707 に答える