使用自动间距写入文本文件

时间:2013-08-20 15:39:09

标签: java

我正在使用Java将表格格式打印到文本文件中。我有三列三行。诀窍是让列排成一行。找到它们之间的间距是什么方法?下面的代码不起作用,因为它设置列之间的设置间距

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class makeTable {

static ArrayList<String> name = new ArrayList<String>();
static ArrayList<String> model = new ArrayList<String>();
static ArrayList<String> year = new ArrayList<String>();

public static void main(String arg[]) {
    addData();
    BufferedWriter writeTable = null;
    try {
        writeTable = new BufferedWriter(new FileWriter("/home/oveledar/Desktop/table.txt"));
        for (int i = 0; i < name.size(); i++){
            writeTable.write(name.get(i) + "   " + model.get(i) +  "   " + year.get(i));
            writeTable.newLine();
        }
    } catch (IOException e) {
        System.err.println(e);
    } finally {
        if (writeTable != null) {
            try {
                writeTable.close();
            } catch (IOException e) {
                System.err.println(e);
            }
        }
    }
}

public static void addData(){
    name.add("Dodge");
    name.add("BMW");
    name.add("VW");
    model.add("Caravan");
    model.add("323i");
    model.add("Passat");
    year.add("2006");
    year.add("2009");
    year.add("2011");

}

输出

Dodge   Caravan   2006
BMW   323i   2009
VW   Passat   2011

“/ t”对长名称不起作用

 Dodge  Caravan 2006
 BMW    323i    2009
 VW     Long model name here    2011

3 个答案:

答案 0 :(得分:3)

尝试使用String.format()

填充字符串

这个问题应该告诉你它是如何运作的:How can I pad a String in Java?

在写入文件之前,将每个元素填充到相等长度的字符串中。

答案 1 :(得分:1)

如果数据不接近相同的长度,则使用制表符不一定会垂直排列列。

更好的解决方案是使用PrintWriter类包装BufferedWriter并使用printf方法。

这样的事情:

printf("%-20s%-20s%-20s", name.get(i), model.get(i), year.get(i));

“ - ”左对齐列,20为列宽。有关格式规范,请参阅java.util.Formatter javadoc。

答案 2 :(得分:0)

就像使用新的换行符\n来创建新行一样,在每个控制台写入后,应该为选项卡\t包含一个转义字符,而不是尝试将其与任意对齐空格。

writeTable.write(name.get(i) + "\t" + model.get(i) +  "\t" + year.get(i));