簡體   English   中英

在java中將arraylist寫入csv文件

[英]Writing arraylist to csv file in java

這是我擁有的代碼,本質上我想將其寫入csv文件:

ArrayList <String> course = new ArrayList<>();
ArrayList <String> name = new ArrayList<>();
ArrayList <Integer> age = new ArrayList<>();

File file = new File("jj.csv");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);

bw.write("Course,Name,Age");
bw.newLine();
for (int i = 0; i < course.size(); i++) {
    bw.write(course.get(i));
    bw.newLine();
}


for (int i = 0; i < name.size(); i++) {
    bw.write("," + name.get(i));
    bw.newLine();
}

for (int i = 0; i < age.size(); i++) {
    bw.write("," + age.get(i));
    bw.newLine();
}

bw.close();
fw.close();

我希望輸出采用這種格式,我得到一個輸出,其中第二行和第三行到處都是:

Course   Name    Age
math     john    7
english  bob     9

我認為使用MessageFormat.format()方法(它在 java.text 包中)是一個很好的解決方案。這是一個例子:

@Test
    public void test05(){
        final String formatTemplate = "{0},{1},{2}";
        List<String> course = Arrays.asList("course0","course1");
        List <String> name = Arrays.asList("name0","name1");
        List <Integer> age = Arrays.asList(1,2);
        final int size = course.size();
        for (int i = 0; i < size; i++) {
            final String lineString = MessageFormat.format(formatTemplate, course.get(i), name.get(i), age.get(i));
            System.out.println(lineString);
            //TODO: bw.write(linString);bw.newLine();
        }
    }

可以得到:

course0,name0,1
course1,name1,2

嘗試在每次寫入后刪除換行符的插入並使用一個循環,我將假設三個列表具有相同的大小

for(int i=0;i<course.size();i++) {
    bw.write(course.get(i));
    bw.write(","+name.get(i));
    bw.write(","+age.get(i));
    bw.newLine();
}
bw.close();
fw.close();

, 或單行使用

for(int i=0;i<course.size();i++) {
    bw.write(course.get(i) + ","+name.get(i) + ","+age.get(i));
    bw.newLine();
}
bw.close();
fw.close();

盡我所能從您的問題中得知,您可以這樣做。 它寫入文件和控制台。

一些數據

List<String> course = List.of("math", "english", "chemistry");
List<String> name = List.of("John", "Mary", "James");
List<Integer> age = List.of(19, 20, 20);

// file destination and format string
File file = new File("jj.csv");
String format = "%-10s %-8s %-4s%n";
  • 這使用 try-with-resources 來打開和關閉 writer。
  • 在單個循環中處理列表
    • 使用System.format格式化csv文件的值
    • 並使用System.printf將它們格式化到控制台。
try (BufferedWriter bw =
        new BufferedWriter(new FileWriter(file))) {
    bw.write("Course,Name,Age");
    
    System.out.printf(format, "Course", "Name",
            "Age");
    for (int i = 0; i < course.size(); i++) {
            for (int i = 0; i < course.size(); i++) {
        // for csv file
        String s =  String.format(",%s,%s,%s",course.get(i),
                        name.get(i), age.get(i));
        // for console
        System.out.printf(format, course.get(i),
                name.get(i), age.get(i));
        bw.write(s);
    }
    }
} catch (Exception e) {
    e.printStackTrace();
}

印刷

Course     Name     Age 
math       John     19  
english    Mary     20  
chemistry  James    20 

您可能需要考慮創建一個類來保存學生信息。

class Student {
       private String name;
       private String course;
       private int age;
    public Student(String name, String course, int age) {
        this.name = name;
        this.course = course;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public String getCourse() {
        return course;
    }
    public int getAge() {
        return age;
    }
    @Override
    public String toString() {
        return String.format("%s, %s, %s]", name, course, age);
    }
}

然后你可以像這樣把它放在一個ArrayList中。

 
List<Student> students = new ArrayList<>(
        List.of(new Student("John", "math", 19),
                new Student("Mary", "english", 20),
                new Student("John", "James", 20)));

並使用循環打印。

for (Student student : students) {
    System.out.println(student);
}

印刷

[John, math, 19]
[Mary, english, 20]
[John, James, 20]

輸出格式由類的toString方法控制,可以調整以滿足您的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM