如何通过JFileChooser将JTable保存到文本文件

时间:2015-12-23 12:40:45

标签: java swing jfilechooser

每当我尝试保存文件时,我都会

  

线程中的异常" 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();
        }
    }
}

文件已创建但为空。

1 个答案:

答案 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);
相关问题