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

到目前为止我有这个:

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(); 

然而。 文件输出如下所示:

http://i.imgur.com/4gulhvY.png

我完全不喜欢。

如何为文本文件的输出创建更好的表格格式?

非常感谢任何帮助。

提前致谢!

编辑:修复!

而且,而不是看起来像

  column 1 column 2 data 1 data 2 

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

 column 1 column 2 data 1 data 2 

会那样喜欢它。

\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 

在我的测试中……

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

COLUMN WISE GRID(DEFAULT)

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

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

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

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

我也建议使用Files.newBufferedWriter ,因为它允许你指定字符编码(否则将使用UTF-8,这比使用平台默认值更好)…并使用try-with-资源声明即使面对exception也要关闭作者:

 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")); } 
 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(); }