java - 为什么文本文件中的空行会导致 java.util.NoSuchElementException?

标签 java readfile

如果您有文本文件:

AAA:123:123:AAAA
BBB:456:456:BBBB

首先,当文本文件中没有空行并且您读取并检索数据时。一切都很好。

当您将文件写入新文件并替换数据或更新时

AAA:9993:9993:AAAA
BBB:456:456:BBBB
-------- This is a blank line-----------

发生这种情况后,会弹出NoSuchElementException。如果不去掉空行,总是会弹出错误。

try {
File fileCI = new File("CI.txt");
FileWriter fileWriter = new FileWriter(fileCI);
BufferedWriter bw = new BufferedWriter(fileWriter); 

for (Customer ci : custList){
if (inputUser.equals(ci.getUserName()) && inputPass.equals(ci.getPassword())) {
    ci.setCardNo(newCardNo);
    ci.setCardType(newCardType);
}
    String text = ci.getRealName() + ";" + ci.getUserName() + ";" + ci.getPassword() + ";" + ci.getAddress() + ";" + ci.getContact() + ";" + ci.getcardType() + ";" + ci.getcardNo() + System.getProperty("line.separator");                                
    bw.write(text);
}
    bw.close();
    fileWriter.close();
}
catch (IOException e) {
    e.printStackTrace();
}

如果我不添加 System.getProperty("line.separator");将添加字符串,所有内容将组合在一起形成一行,而无需新的分隔符。但此分隔符会在文本文件末尾添加一个空行。我可以做些什么来避免这个问题吗?

我应该在读取文件的地方解决吗?或者在我将文件写入新文件的地方解决。

    try {
        Scanner read = new Scanner(file);

        read.useDelimiter(";|\n");
        String tmp = "";
        while (read.hasNextLine()){
            if (read.hasNext()){
                custList.add(new Customer(read.next(), read.next(), read.next(), read.next(), read.next(), read.next(), read.next()));
            } else {
                break;
            }
        }
        read.close();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

编辑:上面的内容现在完美无缺!

最佳答案

我认为您到达了文件末尾(EOF),其中没有剩余行,并且您仍在尝试读取 line 。所以你会得到NoSuchElementException(如果没有找到行)。

试试这个:

String tmp="";
while (reader.hasNextLine()){  
   tmp = s.nextLine();
   // then do something

}

我认为您不必在分隔符中使用 \n 。由于我们使用的是scanner.hasNextLine()。如果您想使用scanner.next()。然后

read.useDelimiter(";|\n");

上面一行应该是:

read.useDelimiter(";|\\n");// use escape character.

就这样循环。

while(s.hasNext()){ 
    //do something.
}

关于java - 为什么文本文件中的空行会导致 java.util.NoSuchElementException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16279262/

相关文章:

c - 一次读取一个文件一个字符

java - 如何将 JUnit 测试类中的一个方法的回滚设置为 false?

java - ClickJacking 过滤器以添加 X-FRAME-OPTIONS 作为响应

java - 无法正确读取和显示文件内容

javascript - NodeJS如何将文件转换为字符串

haskell - : IO String-> String 类型的 Haskell 函数

php - 如何使用fread(或readfile)函数(PHP)获取另一个PHP页面的输出结果?

java - 具有独特解决方案的递归问题

javascript - 如何用图形组件打印jpanel

java - 如何告诉 Xalan 转义 HTML 属性中的字符