如何将两个ArrayLists打印到具有多列的csv文件?

时间:2016-11-11 03:45:20

标签: java csv arraylist

我有两个数组列表,如下所示,

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.*;

class Reader {
    public static void main(String args[]) throws FileNotFoundException {

        ArrayList<String> animal = new ArrayList<>();
        animal.add("Dog");
        animal.add("Cat");
        animal.add("Mouse");

        ArrayList<Integer> numbers = new ArrayList<>();
        for (int i = 1; i <= 15; i++) {
            numbers.add(i);
        }

        PrintWriter writer = new PrintWriter("animals.csv");

        for (String ani : animal) {
            writer.println(ani + ",");
        }

        writer.close();    
    }
}

我希望输出在.csv文件中是这样的。

Dog,1,2,3,4,5,
Cat,6,7,8,9,10,
Mouse,11,12,13,14,15,

当我使用for循环时,数组列表的输出会在.csv文件中一个接一个地打印出来。

如何按照我想要的方式格式化数组列表,所以它在Excel中看起来像这样? enter image description here

2 个答案:

答案 0 :(得分:1)

使用writer.print()代替writer.println()

注意&#39; ln&#39;在您使用的方法名称中,这意味着打印行。

更新:还要添加数字和动物:

public static void main(final String[] args) throws FileNotFoundException {
    ArrayList<String> animal = new ArrayList<>();
    animal.add("Dog");
    animal.add("Cat");
    animal.add("Mouse");

    ArrayList<Integer> numbers = new ArrayList<>();
    for (int i = 1; i <= 15; i++) {
        numbers.add(i);
    }

    PrintWriter writer = new PrintWriter("animals.csv");

    List<String> row = new ArrayList<>();
    int i = 0;
    for (String ani : animal) {
        row.add(ani);
        for (int j = 0; j < 5; j++) {
            row.add(String.valueOf(numbers.get(i++)));
        }
        writer.println(String.join(",", row));
        row.clear();
    }

    writer.close();
}

答案 1 :(得分:0)

您的编写方法正在打印一行。你只需要使用打印。

因此writer.println(ani + ",");变为writer.print(ani + ",");

此外,要按照您的要求添加数字,您可以将其作为替代方案。这就像你说动物名后每行只有5个元素一样。

PrintWriter writer = new PrintWriter("animals.csv");
int rowCounter = 0;
for (String ani : animals) {
  writer.print(ani);
  for (int i = rowCounter * 5; i < (rowCounter * 5 + 5); i++) {
    writer.print("," + numbers.get(i));
  }
  writer.println();
  rowCounter++;
}

writer.close();