当前位置: 首页 > 知识库问答 >
问题:

将JTable保存为文本文件

朱令
2023-03-14

我正在保存一个. txt和. doc文件,其中包含我的JTable中的数据。当它保存时,它会像在表格中一样将文本放在外面,但是由于数据长度不同,它不适合。所以我试着把日期安排如下:

第1列名称:第1行第1列数据

第2列名称:第1行第2列数据

第3列名称:第1行第3列数据

第4列名称:第1行第4列数据

第1列名称:第2行第1列数据

第2列名称:第2行第2列数据

第3列名称:第2行第3列数据

第4列名称:第2行第4列数据

等等。

我现在掌握的代码是:

private void saveResultsActionPerformed(ActionEvent evt) {


    int returnVal = fileChooser.showSaveDialog(NewJFrame.this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        try {
            File file = fileChooser.getSelectedFile();
            PrintWriter os = new PrintWriter(file);
            os.println("");
            for (int col = 0; col < table.getColumnCount(); col++) {
                os.print(table.getColumnName(col) + "\t");
            }

            os.println("");
            os.println("");

            for (int i = 0; i < table.getRowCount(); i++) {
                for (int j = 0; j < table.getColumnCount(); j++) {
                    os.print(table.getValueAt(i, j).toString() + "\t");

                }
                os.println("");
            }
            os.close();
            System.out.println("Done!");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

但请记住,我的每个表都有不同数量的列和行。我曾尝试将列和数据保存在数组中,我觉得这是解决问题的正确方法,但我不知道如何按我提到的顺序打印,

共有3个答案

颛孙和颂
2023-03-14

下面的代码使用子字符串允许列在文本文件中有序排列。这有点混乱,但第一个for循环处理列标题,第二个for循环处理所有数据。如果要更改每条数据的大小,请将20更改为首选大小。

BufferedWriter bfw = new BufferedWriter(new FileWriter(
                    "Data.txt"));

            for (int i = 0; i < table.getColumnCount(); i++) {//first loop is used for titles of each column

                String name = String.valueOf(table.getColumnName(i));

                if (name.length() > 20) {//20 (characters long) is the constant I chose to make each value
                    name = name.substring(0, 20);
                } else if (name.length() == 20) {

                } else {
                    String spaces = "";
                    int diff = 20 - name.length();
                    while (diff > 0) {
                        spaces = spaces + " ";
                        diff--;
                    }
                    name = name.concat(spaces);
                }

                bfw.write(name);
                bfw.write("\t");
            }

            for (int i = 0; i < table.getRowCount(); i++) {//for all the data in the Jtable excluding column headers
                bfw.newLine();
                for (int j = 0; j < table.getColumnCount(); j++) {

                    if (table.getValueAt(i, j) == null) {
                        bfw.write("                    ");
                        bfw.write("\t");
                    }

                    else {

                        String name = String.valueOf((table
                                .getValueAt(i, j)));

                        if (name.contains("(")) {
                            name = name.substring(0, name.indexOf("("));
                        }

                        if (name.length() > 20) {
                            name = name.substring(0, 20);
                        } else if (name.length() == 20) {

                        } else {
                            String spaces = "";
                            int diff = 20 - name.length();
                            while (diff > 0) {
                                spaces = spaces + " ";
                                diff--;
                            }
                            name = name.concat(spaces);
                        }

                        bfw.write(name);
                        bfw.write("\t");
                    }
                }
            }
伏默
2023-03-14

下面提供了我所做的一个最小的例子。我给出以下输出形式:

姓名:凯西姓氏:史密斯体育:滑雪板年份: 5

名字:约翰姓氏:多伊运动:划船

        String[] columnNames = {"First Name", "Last Name","Sport","# of Years"};

    Object[][] data = {
            {"Kathy", "Smith", "Snowboarding", "5"},
            {"John", "Doe", "Rowing", "2"},
            {"Sue", "Black", "Knitting", "8"},
            {"Jane", "White", "Speed reading", "10"},
            {"Joe", "Brown", "Pool", "20"}
    };

    JTable table = new JTable(data, columnNames);

    for(int row = 0; row < table.getRowCount(); row++) {

        for(int column = 0; column < table.getColumnCount(); column++) {
            System.out.print(table.getColumnName(column) + ": ");
            System.out.println(table.getValueAt(row, column));
        }
        System.out.println(""); // Add line space
    }
夏建木
2023-03-14

算法非常简单:

for (int row = 0; row < table.getRowCount(); row++) {
    for (int col = 0; col < table.getColumnCount(); col++) {
        os.print(table.getColumnName(col));
        os.print(": ");
        os.println(table.getValueAt(row, col));
    }
}
 类似资料:
  • 问题内容: 我正在保存一个.txt和.doc文件,其中包含来自JTable的数据。在保存的那一刻,它像在表中一样放置文本,但是由于数据长度不同,它无法容纳。因此,我试图按如下所示安排日期: 第1列名称:第1行第1列数据 第2列名称:第1行第2列数据 第3列名称:第1行第3列数据 第4列名称:第1行第4列数据 第1列名称:第2行第1列数据 第2列名称:第2行第2列数据 第3列名称:第2行第3列数据

  • 问题内容: 我最近开始使用Java,当我需要从jTable开始创建excel文件时,我遇到了apache poi库的一些问题。 我已经阅读了许多线程并提出了一些行不通的代码(即使这是非常简单的东西,并且有很多示例,这使我看起来更加愚蠢),我希望有人可以帮助我。 所以这是问题: a) 为什么要编写Excel文件的for循环不填充每个单元格?(excel文件中唯一包含数据的行是第六行,这也让我想知道为

  • 当我启动这个代码时,你通常认为它会在文本文件中输入一个100,但我不知道为什么它会像字符一样输入一个“d”。有人知道如何修复吗?一个方法应该输入一个数据,一个应该输入那个数据,一个应该保存那个数据。

  • 问题内容: 有什么方法可以读取文本文件并将内容存储在Jtable中?我有一个文本文件,其中包含有关某些过程的某些信息。就像一个具有列和各自值的表。是否可以获取.txt文件的内容并以Jtable的形式显示?我正在使用Eclipse和Window Builder。任何帮助将不胜感激。谢谢! 问题答案: 我将研究Oracle的教程: 读/写文本文件 JTable教程 当从文本文件中获取数据时,您需要将其

  • 问题内容: 我想知道如何将PHP变量保存到txt文件,然后再次检索它们。 例: 有一个输入框,提交后,在输入框中写入的内容将保存到文本文件中。稍后,需要将结果作为变量返回。因此,可以说变量是$ text,我需要将其保存到文本文件中并能够再次取回它。 问题答案: 这应该可以执行您想要的操作,但是如果没有更多上下文,我无法确定。 将$ text写入文件: 再次检索它:

  • 问题内容: 我正在使用Apache POI库将大量数据导入Excel文件。我不能使用HSSF模型,因为它需要太多内存,并且Java会抛出内存堆异常。我发现的方法是SXSSF工作簿模型,该模型将每N行写入文件中,而不是将所有工作簿存储在内存中。但是我找不到方法,如何将其保存到.xls(Excel 2003及更低格式)而不是.xlsx。 问题答案: 你不能 如POI组件页面上所述,HSSF用于处理.x