每当我尝试保存文件时,我都会
线程中的异常" AWT-EventQueue-0"显示java.lang.NullPointerException 在java.io.Writer.write(未知来源)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();
}
}
}
文件已创建但为空。
答案 0 :(得分:1)
bfw.write(TabOne.table.getColumnName(i));
bfw.write((String) (TabOne.table.getValueAt(i, j)));
getColumnName(i)返回null
,或者getValueAt(i,j)返回null。如果写入写入空值,Writer会抛出NullPointerException。
在这两种情况下,您应该保存到变量中,测试null,并替换为&#34;&#34;如果是,就像
String val = (String) TabOne.table.getValueAt(i, j);
if (val == null) {
val = "";
}
btw.write(val);