[英]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";
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.