我有一个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();
}
}
答案 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);
}
}