2013-04-11 48 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个字符长度。