如何通过 JFileChooser 将 JTable 保存到文本文件
how to save a JTable to text file through JFileChooser
每当我尝试保存文件时,我都会得到
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at java.io.Writer.write(Unknown Source) at
reu.FileMod.saveFile(FileMod.java:47)
到目前为止我的代码
package reu;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import userInterface.TabOne;
public interface FileMod {
public static void saveFile() {
File file= null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Specify a file to save");
int userSelection = fileChooser.showSaveDialog(null);
if (userSelection == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
}
BufferedWriter bfw;
try {
if(!file.exists()){
file.createNewFile();
}
bfw = new BufferedWriter(new FileWriter(file));
for (int i = 0; i < TabOne.table.getColumnCount(); i++) {
bfw.write(TabOne.table.getColumnName(i));
bfw.write("\t");
}
for (int i = 0; i < TabOne.table.getRowCount(); i++) {
bfw.newLine();
for (int j = 0; j < TabOne.table.getColumnCount(); j++) {
bfw.write((String) (TabOne.table.getValueAt(i, j)));
bfw.write("\t");
;
}
}
bfw.close();
JOptionPane.showMessageDialog(null, "Successful!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
文件已创建但为空。
bfw.write(TabOne.table.getColumnName(i));
bfw.write((String) (TabOne.table.getValueAt(i, j)));
要么 getColumnName(i) 返回 null
,要么 getValueAt(i,j) 返回 null。如果您写入空值,Writer 将抛出 NullPointerException。
在这两种情况下,您都应该保存到一个变量中,测试是否为空,如果是则用“”替换,例如
String val = (String) TabOne.table.getValueAt(i, j);
if (val == null) {
val = "";
}
btw.write(val);
每当我尝试保存文件时,我都会得到
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at java.io.Writer.write(Unknown Source) at reu.FileMod.saveFile(FileMod.java:47)
到目前为止我的代码
package reu;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import userInterface.TabOne;
public interface FileMod {
public static void saveFile() {
File file= null;
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Specify a file to save");
int userSelection = fileChooser.showSaveDialog(null);
if (userSelection == JFileChooser.APPROVE_OPTION) {
file = fileChooser.getSelectedFile();
}
BufferedWriter bfw;
try {
if(!file.exists()){
file.createNewFile();
}
bfw = new BufferedWriter(new FileWriter(file));
for (int i = 0; i < TabOne.table.getColumnCount(); i++) {
bfw.write(TabOne.table.getColumnName(i));
bfw.write("\t");
}
for (int i = 0; i < TabOne.table.getRowCount(); i++) {
bfw.newLine();
for (int j = 0; j < TabOne.table.getColumnCount(); j++) {
bfw.write((String) (TabOne.table.getValueAt(i, j)));
bfw.write("\t");
;
}
}
bfw.close();
JOptionPane.showMessageDialog(null, "Successful!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
文件已创建但为空。
bfw.write(TabOne.table.getColumnName(i));
bfw.write((String) (TabOne.table.getValueAt(i, j)));
要么 getColumnName(i) 返回 null
,要么 getValueAt(i,j) 返回 null。如果您写入空值,Writer 将抛出 NullPointerException。
在这两种情况下,您都应该保存到一个变量中,测试是否为空,如果是则用“”替换,例如
String val = (String) TabOne.table.getValueAt(i, j);
if (val == null) {
val = "";
}
btw.write(val);