2014-10-07 129 views
1

到目前爲止,我有這樣的:將數據寫入文本文件以表格的形式

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 

會喜歡你這樣。

+1

的'\ r \ N'與screwig結果ts,試試'String.format(「%20s%20s \ r \ n」,「第1列」,「第2列」)而不是 – MadProgrammer 2014-10-07 05:41:16

回答

6

\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 

在我的測試中...

+0

驚人的!,這工作完美無瑕,謝謝!我編輯了OP還有一件事,介意看看?再次感謝。 – Moko 2014-10-07 07:01:35

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

謝謝。將嘗試這種方式。另外,仔細看看OP?做了一個編輯,要求再做一件事。謝謝! – Moko 2014-10-07 07:02:13

+0

@Moko:看我的編輯。 – 2014-10-07 07:04:53

+0

謝謝!感謝所有的幫助。將看看文檔。 – Moko 2014-10-07 07:16:10

4

我認爲你正試圖以表格格式獲取數據。我開發了一個Java庫,可以用更多的定製構建更復雜的表格。你可以得到源代碼here。以下是我的圖書館可以創建的一些基本表視圖。希望這個功能夠用!

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

NO GRID

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