我通过这个tutorial来学习如何使用Netbeans创建一个GUI应用程序来获取表单上的信息,能够编辑它,并将其保存到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:起初没有工作,但我明白了。我没有添加&#34; \ n&#34;在写文件时。我更新了我的代码,并在打开新文件时添加了代码来清除我的Jtable。让我知道是否有任何不是&#34;良好做法&#34;。
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#
答案 0 :(得分:2)
String.split(...)
方法分割每行数据。 addRow(...)
方法将数据添加到模型中。