Java 以表格格式将数据写入文本文件

Java 以表格格式将数据写入文本文件,java,netbeans,file-io,filewriter,Java,Netbeans,File Io,Filewriter,到目前为止,我有: 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")); arc

到目前为止,我有:

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
我如何使它看起来像这样:

column 1             column 2
data 1               data 2

希望是这样。

第二个参数是对
\r\n
进行评估的,因此它基本上计算所需的空间,类似于<代码>20-“第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

在我的测试中…

您当前正在右对齐的第二个参数中包含
“\r\n”
。我怀疑您根本不想要空格,也不希望
\r\n
成为20个字符计数的一部分

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

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

我建议也使用
Files.newBufferedWriter
,因为它允许您指定字符编码(并将使用UTF-8,否则比使用平台默认值要好)…并使用try 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")); 
}

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

按列网格(默认)

全网格

+------------------------+-------------+------+-------------+-------------+
|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      
无网格

+------------------------+-------------+------+-------------+-------------+
|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      

如果您想输出变量而不是硬编码,它也可以与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();
}
试试看{
PrintWriter myObj=新的PrintWriter(“Result.txt”);
resultData.println(“操作的结果”);
对于(int i=0;i<15;i++){
resultData.printf(“%-20d%-20d\r”,最终得分[i],中期得分[i]);
}
resultData.close();
}捕获(IOE异常){
System.Out.Println(“发生错误”);
e、 printStackTrace();
}

String.format(“%20s%20s\r\n”、“第1列”、“第2列”)中的“\r\n”与结果不符,请尝试
String.format(“%20s%20s\r\n”、“第1列”、“第2列”)
InsteadAzing!,这一功能完美无瑕,谢谢!我编辑了一篇OP文章,想看一看吗?再次感谢。谢谢。我会这样尝试。另外,介意看一看OP吗?编辑了一篇文章,要求再看一点。谢谢!谢谢!感谢!感谢所有帮助。会看一看文档的。好黑客!对我来说非常有用.有没有办法在android中导入这个