如果您有文本文件:
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();
}
编辑:以上内容现在完美无缺!
答案 0 :(得分:1)
我认为你到达文件末尾(EOF),那里没有剩余的行,你仍然试图读取行。所以你得到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.
}