生成CSV(Comma-Separated Values)檔案是業務的處理結果比較常見的持久化方式。
本文就分享一個將如何在csv檔案中顯示雙引號
工具/原料
IntelliJ IDEA
java
方法/步驟
先上個預期的結果圖:
結果檔案有三列,表頭分別為id,Name,Desc
再上一段希望生成上述csv的程式碼:
package chapter4;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by MyWorld on 2016/3/23.
*/
public class CsvWriteWithDoubleQuotation {
public static void main(String[] args) throws IOException {
List
CsvWriteWithDoubleQuotation csvWriter = new CsvWriteWithDoubleQuotation();
csvWriter.write(source);
} private void write(List
File file = new File("resultWithDoubleQuotation.csv");
System.out.println(file.getAbsolutePath());
FileWriter fw = new FileWriter(file);
String title = "id,Name,Desc";
fw.write(title + "\n");
for (Peron peron : source) {
fw.write(String.format("%s,%s,\"%s\"\n", peron.getId(), peron.getName(), peron.getDesc()));
}
fw.flush();
fw.close();
} private static List
List
source.add(new Peron(1, "Tom", "I li kui, nicknamed \"black tornado\""));
source.add(new Peron(2, "Jim", "I'm Jim"));
source.add(new Peron(3, "John", "I'm John,twenty years old."));
return source;
}
}class Peron {
private final int id;
private final String name;
private final String desc;
public Peron(int id, String name, String desc) {
this.id = id;
this.name = name;
this.desc = desc;
} public int getId() {
return id;
} public String getName() {
return name;
}
public String getDesc() {
return desc;
}
}
執行上述程式碼,
看看生成的結果檔案是否與預期相同
咦,怎麼與預期的不是很一樣了啊,左邊的雙引號怎麼到後面了?
id,Name,Desc
1,Tom,"I li kui, nicknamed "black tornado""
2,Jim,"I'm Jim"
3,John,"I'm John,twenty years old."
分析下原因:
與預期輸出不一致的一行:
1,Tom,"I li kui, nicknamed "black tornado""
貌似前面"I li kui, nicknamed "是正常輸出了,後面的兩個雙引號""照原樣輸出了
原來,csv預設由英文雙引號("")括起來的內容是一個欄位, 如果字串放在英文雙引號中,字串中的內容除英文雙引號外,都會按原樣輸出。
那麼,我們這次要輸出的雙引號呢?
csv中約定,欄位裡連續兩個雙引號""顯示成一個
更改下程式碼:
Code:
source.add(new Peron(1, "Tom", "I li kui, nicknamed \"\"black tornado\"\""));
source.add(new Peron(2, "Jim", "I'm Jim.\nAnd I'm a good boy."));
看看生成的結果與實際是否一致
是一致的!!
OK