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

标签 java swing 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);

关于java - 如何通过 JFileChooser 将 JTable 保存到文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34435949/

相关文章:

java - Apache ActiveMQ 在 Windows 上启动然后突然停止

java - HTTP 状态 404 : The requested resource is not available/Tomcat7

java定时器不递增

java - 将方 block 替换为\n

Java JFileChooser 过滤器文件为 "File.txt"

java - 如何禁用 JFileChooser 中的目录打开?

java - 如果知道时间,如何计算范围内每个月的数据并添加到一个列表

java - 大 O for 2D for 循环

Java Swing 应用程序意外终止

java - 从另一个 jar 添加组件到 JPanel