В настоящее время я работаю над программой для одного из моих классов java, и я продолжаю работать в стене с чтением файла! Я использую JTable для отображения информации, поэтому, когда информация считывается из файла, она добавляется в строку. Всякий раз, когда есть пустая строка, сканер не может ее прочитать и выбросить ошибку! Я получаю java.util.NoSuchElementException на последней строке сканирования! Справа нет, я подал в суд на два отдельных сканера. Я попытался использовать метод String.split, который также дал мне ошибку (ArrayIndexOutOfBoundsException: 0). Я опубликую здесь ниже приведенные ниже методы сохранения (обе версии сканера и разделение).Чтение из файла с пустой строкой
частная пустота чтения() {
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(); сканер = null;
} 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);
}
}
да, я извиняюсь я забыл включить эту строку кода в моей должности –
я вы сделали то, что вы предложили, и теперь это работает !, но теперь, когда в поле с разделителями нет ничего, он будет печатать нуль в таблице –
. put 'model.addRow (новый объект [] {tableRow [0], tableRow [1] , tableRow [2], tableRow [3], tableRow [4]}); 'внутри тела защитного' if', поэтому вы только добавляете значения в таблицу, если сможете их проанализировать (обратите внимание: вызов ' recIn.close() 'должен находиться вне' if': вы хотите закрыть его, можете ли вы его прочитать или нет). Кроме того, если это решило ваш вопрос, пожалуйста, примите мой ответ. – Attila