【问题标题】:Writing data to text file in table format以表格格式将数据写入文本文件
【发布时间】:2014-12-01 11:23:42
【问题描述】:

到目前为止,我有这个:

File dir = new File("C:\\Users\\User\\Desktop\\dir\\dir1\\dir2);
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter archivo = new FileWriter(file);
archivo.write(String.format("%20s %20s", "column 1", "column 2 \r\n"));
archivo.write(String.format("%20s %20s", "data 1", "data 2"));
archivo.flush();
archivo.close();

但是。文件输出如下所示:

我一点也不喜欢。

如何为文本文件的输出制作更好的表格格式?

不胜感激。

提前致谢!

编辑:已修复!

另外,看起来不像

    column 1             column 2
      data 1               data 2

我怎样才能让它看起来像这样:

column 1             column 2
data 1               data 2

宁愿这样。

【问题讨论】:

  • `\r\n` 与结果不一致,请尝试 String.format("%20s %20s\r\n", "column 1", "column 2") 代替

标签: java netbeans file-io filewriter


【解决方案1】:

\r\n 被评估为第二个参数的一部分,所以它基本上计算所需的空间类似于...20 - "column 2".length() - " \r\n".length(),但由于第二行没有这个,它占用的空间更少,并且看起来没有对齐...

尝试将\r\n 添加为基本格式的一部分,例如...

String.format("%20s %20s \r\n", "column 1", "column 2")

这会产生类似...

        column 1             column 2
          data 1               data 2

在我的测试中...

【讨论】:

  • 太棒了!,这工作完美无缺,谢谢!。我为另外 1 件事编辑了 OP,介意看一下吗?再次感谢。
【解决方案2】:

我认为您正在尝试以表格格式获取数据。我开发了一个 Java 库,它可以构建更复杂的表并进行更多自定义。您可以获取源代码here。以下是我的库可以创建的一些基本表格视图。希望这足够有用!

智能列网格(默认)

+--------------+--------------+--------------+--------------+-------------+
|NAME          |GENDER        |MARRIED       |           AGE|    SALARY($)|
+--------------+--------------+--------------+--------------+-------------+
|Eddy          |Male          |No            |            23|      1200.27|
|Libby         |Male          |No            |            17|       800.50|
|Rea           |Female        |No            |            30|     10000.00|
|Deandre       |Female        |No            |            19|     18000.50|
|Alice         |Male          |Yes           |            29|       580.40|
|Alyse         |Female        |No            |            26|      7000.89|
|Venessa       |Female        |No            |            22|    100700.50|
+--------------+--------------+--------------+--------------+-------------+

全网格

+------------------------+-------------+------+-------------+-------------+
|NAME                    |GENDER       |MARRIE|          AGE|    SALARY($)|
+------------------------+-------------+------+-------------+-------------+
|Eddy                    |Male         |No    |           23|      1200.27|
+------------------------+-------------+------+-------------+-------------+
|Libby                   |Male         |No    |           17|       800.50|
+------------------------+-------------+------+-------------+-------------+
|Rea                     |Female       |No    |           30|     10000.00|
+------------------------+-------------+------+-------------+-------------+
|Deandre                 |Female       |No    |           19|     18000.50|
+------------------------+-------------+------+-------------+-------------+
|Alice                   |Male         |Yes   |           29|       580.40|
+------------------------+-------------+------+-------------+-------------+
|Alyse                   |Female       |No    |           26|      7000.89|
+------------------------+-------------+------+-------------+-------------+
|Venessa                 |Female       |No    |           22|    100700.50|
+------------------------+-------------+------+-------------+-------------+

无网格

NAME                    GENDER       MARRIE          AGE    SALARY($)      
Alice                   Male         Yes              29       580.40      
Alyse                   Female       No               26      7000.89      
Eddy                    Male         No               23      1200.27      
Rea                     Female       No               30     10000.00      
Deandre                 Female       No               19     18000.50      
Venessa                 Female       No               22    100700.50      
Libby                   Male         No               17       800.50      
Eddy                    Male         No               23      1200.27      
Libby                   Male         No               17       800.50      
Rea                     Female       No               30     10000.00      
Deandre                 Female       No               19     18000.50      
Alice                   Male         Yes              29       580.40      
Alyse                   Female       No               26      7000.89      
Venessa                 Female       No               22    100700.50      

【讨论】:

  • 好黑客!像魅力一样为我工作。
  • 有没有办法在android中导入这个
【解决方案3】:

您当前在右对齐的第二个参数中包含" \r\n"。我怀疑您根本不想要这个空间,并且您不希望 \r\n 成为 20 个字符的一部分。

要左对齐而不是右对齐,请使用- 标志,即%-20s 而不是%20s。有关详细信息,请参阅 Formatter 文档。

此外,您可以使用%n 表示当前平台的行终止符,使代码以更跨平台的方式工作(除非您特别想要一个Windows 文件。

我也推荐使用Files.newBufferedWriter,因为它允许您指定字符编码(否则将使用UTF-8,这比使用平台默认值更好)...并尝试使用-with-resources 语句即使在遇到异常时也关闭编写器:

try (Writer writer = Files.newBufferedWriter(file.toPath())) {
  writer.write(String.format("%-20s %-20s%n", "column 1", "column 2"));
  writer.write(String.format("%-20s %-20s%n", "data 1", "data 2")); 
}

【讨论】:

  • 谢谢。会这样尝试。另外,注意看一下 OP?,进行了编辑,要求再做 1 件事。谢谢!
  • 谢谢!。感谢所有的帮助。将查看文档。
【解决方案4】:
try {
    PrintWriter outputStream = new PrintWriter("myObjects.txt");
    outputStream.println(String.format("%-20s %-20s %-20s", "Name", "Age", "Gender"));
    outputStream.println(String.format("%-20s %-20s %-20s", "John", "30", "Male"));
    outputStream.close();
} catch (IOException e) {
    e.printStackTrace();
}

【讨论】:

    【解决方案5】:

    如果您想输出变量而不是硬编码,它也可以与 printf 一起使用

    try {
        PrintWriter myObj = new PrintWriter("Result.txt");
        resultData.println("THE RESULTS OF THE OPERATIONS\n");
        for (int i = 0; i < 15; i++){
                resultData.printf("%-20d%-20d\r", finalScores[i], midSemScores[i]);
            }
        resultData.close();
    } catch (IOException e){
        System.Out.Println("An error occurred");
        e.printStackTrace();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多