到目前为止,我有这个:
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
会更喜欢这样。
答案 0 :(得分:7)
\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 :(得分:6)
我认为您正在尝试以表格格式获取数据。我开发了一个Java库,可以构建更复杂的表,并提供更多自定义。您可以获取源代码here。以下是我的库可以创建的一些基本表视图。希望这很有用!
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
答案 2 :(得分:1)
您目前在右对齐的第二个参数中包含" \r\n"
。我怀疑你根本不想要这个空间,你不希望\r\n
成为20个字符的一部分。
要左对齐而不是右对齐,请使用-
标记,即%-20s
而不是%20s
。有关详细信息,请参阅Formatter
文档的文档。
此外,您可以使用%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"));
}
答案 3 :(得分:0)
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();
}
答案 4 :(得分:0)
如果您想输出变量而不是硬编码,它也适用于 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();
}