gpt4 book ai didi

java - 从带有空行的文件中读取

转载 作者:行者123 更新时间:2023-12-04 05:50:15 28 4
gpt4 key购买 nike

我目前正在为我的一个 java 类编写一个程序,并且我一直在阅读文件时遇到墙壁!我正在使用 JTable 来显示信息,因此当从文件中读取信息时,它会被添加到一行中。只要有空白行,扫描仪就无法读取它并抛出错误!我在最后一个扫描线上得到一个 java.util.NoSuchElementException !截至目前,我正在起诉两个单独的扫描仪。我曾尝试使用 String.split 方法,这也给了我一个错误(ArrayIndexOutOfBoundsException:0)。我将在下面发布阅读保存方法(两个扫描仪版本和拆分)。

私有(private)无效读取(){

    try {
Scanner scanner = new Scanner(new File("games.dat"));


scanner.useDelimiter(System.getProperty("line.separator"));


while (scanner.hasNext()) {
String[] tableRow = new String[6];
Scanner recIn = new Scanner(record);
recIn.useDelimiter("\\s*\\|\\s*");
tableRow[0] = recIn.next();
tableRow[1] = recIn.next();
tableRow[2] = recIn.next();
tableRow[3] = recIn.next();
tableRow[4] = recIn.next();
//recIn.next();
recIn.close();
model.addRow(new Object[]{tableRow[0],
tableRow[1], tableRow[2],
tableRow[3], tableRow[4]});

}scanner.close();
扫描仪=空;
    } catch (Exception ex) {
JOptionPane.showConfirmDialog(null, "Could not connect to file! Make sure you are not in zipped file!",
"Warning!", JOptionPane.OK_OPTION,
JOptionPane.ERROR_MESSAGE);
ex.printStackTrace();

}
}



private void save() {

for (int i = 0; i < model.getRowCount(); i++) {


String data = model.getValueAt(i, 0) + "|" + model.getValueAt(i, 1)
+ "|" + model.getValueAt(i, 2) + "|" + model.getValueAt(i, 3)
+ "|" + model.getValueAt(i, 4) + "|";
games.add(data);

}
 try {
for (int i = 0; i < games.size(); i++) {
fileOut.println(games.get(i));
}
fileOut.close();

} catch (Exception ex) {
JOptionPane.showConfirmDialog(null, "Could not connect to file! Make sure you are not in zipped file!",
"Warning!", JOptionPane.OK_OPTION,
JOptionPane.ERROR_MESSAGE);

}
}

最佳答案

recIn.next();如果该行为空,将失败,请使用 hasNext() 保护它:

Scanner recIn = new Scanner(record); 
recIn.useDelimiter("\\s*\\|\\s*");
if (recIn.hasNext()) {
tableRow[0] = recIn.next();
tableRow[1] = recIn.next();
tableRow[2] = recIn.next();
tableRow[3] = recIn.next();
tableRow[4] = recIn.next();
}

这假设当记录中有一个元素时,所有元素都在那里。如果这不能保证,您需要保护每个 next()调用 hasNext()并决定当记录中间的元素用完时该怎么做。

此外,您似乎有一个无限循环:
while (scanner.hasNext()) {
// no calls to scanner.next()
}

你漏掉了吗 String record = scanner.next();从那个循环的顶部?

关于java - 从带有空行的文件中读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144843/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com