2013-04-11 80 views
0

我使用BufferedWriter寫串像這樣的文件:寫入字符串到文件中的特定位置

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 

public class Test { 

    public static void main(String[] args) throws IOException { 
     String myname = "JOHN DOE MAXWELL"; 
     String myotherName = "MELCHIZEDEK NEBUCHARDINEZZAR"; 
     String mylocation = "SOUTH EAST"; 
     String myotherlocation = "SOUTH WEST"; 
     File f = new File("MyFile.txt"); 
     BufferedWriter bw = new BufferedWriter(new FileWriter(f)); 
     bw.write(myname + "      " + mylocation); 
     bw.newLine(); 
     bw.write(myothername + "     " + myotherlocation); 
     bw.close(); 
    } 
} 

我需要寫mylocation這樣,無論字符串myname,的開始位置的長度mylocation不會受到影響。請協助。

我Outputshould是:

JOHN DOE MAXWELL   SOUTH EAST 
MELCHIZEDEK NEBUCHARDI SOUTH WEST 
+0

請修改您的問題以包含您希望生成的文件的樣子的示例。也許有兩個例子,不同長度的myname? – 2013-04-11 13:16:02

+0

插入點? – 2013-04-11 13:18:50

回答

3

你可以做

bw.write(String.format("%-20s%s%n", myName, myLocation)); 

可以使用的PrintWriter使用的printf(),它同時做兩。

例如使用PrintWriter的

pw.printf("%-" + myNameWidth + "s%s%n", myName, myLocation); 
+0

很好的答案。人們也可以使用相同的技術來生成通用的填充長度方法。有關示例,請參閱http://stackoverflow.com/a/391978/474189。 – 2013-04-11 13:20:40

+0

出於好奇如果我想要三個字符串如'bw.write(String.format(「% - 20s%s%n」,myName,myLocation,MyotherString));' – ErrorNotFoundException 2013-04-12 06:44:17

+1

您需要另一個'%-20s'或' %-32s'或任何你想要的寬度。注意'-'假設你想要左對齊。沒有它,字符串就像數字一樣是正確的。 – 2013-04-12 08:18:15

1

這樣,無論字符串MYNAME的長度,開始mylocation的 位置不會受到影響

我能想到的是,當每一個是唯一的情況下,一條新線。

您必須指定最大取消字符長度,在此之後不再保證此順序,實際上應該在讀取文件時進行格式化,此時您可以確定myname的最長變量並根據其格式化輸出。

1

試試這個

bw.write(myname + "        ".substring(0, 30) + " " + mylocation); 
1

使用Google Guava

Strings.padEnd("JOHN DOE MAXWELL", 26, ' ').length() 

字符串將總是26個字符長度。

相關問題