Я прошел этот учебник, чтобы узнать, как использовать Netbeans для создания приложения с графическим интерфейсом для вводить информацию в форму, иметь возможность редактировать ее и сохранять в JTable. Теперь я хочу расширить то, что я узнал, чтобы иметь возможность записывать эту JTable в текстовый файл с разделителями и читать его позже, чтобы добавить больше данных. Мне удалось успешно записать данные в файл. Код для этого находится здесь и выполняется через созданное мной событие меню:
private void mnuSaveActionPerformed(java.awt.event.ActionEvent evt) {
int returnVal = fileChooser.showSaveDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
FileWriter fw = new FileWriter(file.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 0; i < tblProduct.getRowCount(); i++) {
for (int j = 0; j < tblProduct.getColumnCount(); j++) {
bw.write((String) tblProduct.getModel().getValueAt(i, j) + "#");
}
bw.newLine();
}
bw.close();
fw.close();
} catch (IOException ex) {
System.out.println("problem accessing file" + file.getAbsolutePath());
}
} else {
System.out.println("File access cancelled by user.");
}
}
Я прочитал много сообщений, посвященных таким вещам, как StringTokenizer, но я просто не могу понять, какой подход выбрать. Любое направление будет оценено.
ОБНОВЛЕНИЕ:
@camickr: Сначала не работало, но я понял. Я не добавлял "\n" при записи файла. Я обновил свой код, а также добавил код для очистки Jtable при открытии нового файла. Дайте мне знать, если есть что-то, что не является «хорошей практикой».
private void mnuOpenActionPerformed(java.awt.event.ActionEvent evt) {
String line;
DefaultTableModel model = (DefaultTableModel) tblProduct.getModel();
for (int i = tblProduct.getRowCount() - 1; i >= 0; i--) {
model.removeRow(i);
}
int returnVal = fileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try {
FileReader fr = new FileReader(file.getAbsoluteFile());
BufferedReader br = new BufferedReader(fr);
while ((line = br.readLine()) != null) {
model.addRow(line.split("#"));
}
br.close();
fr.close();
} catch (IOException ex) {
System.out.println("problem accessing file" + file.getAbsolutePath());
}
} else {
System.out.println("File access cancelled by user.");
}
}
Вот как выглядит мой тестовый текстовый файл после создания:
Test1#Electronic#23.50#
Test2#Art#100.00#
Test3#Food#25.00#
Test4#Electronic#10.00#
Test5#Art#1.00#
Test6#Electricity#3.00#
Test7#Food#5.00#
Test8#Food#7.00#
Test9#Electronic#9.00#
BufferedWriter.newLine()
для более надежного подхода. - person Andrew Thompson   schedule 15.06.2016JTable
? - person Sanjeev Saha   schedule 15.06.2016JTable
каждый раз, когда вы читаете новый файл, вместо добавления и удаления строки из существующей модели. - person Sanjeev Saha   schedule 15.06.2016