CSV檔案是業務的處理結果常見的持久化方式。
本文就分享將資料寫入csv檔案時的一個坑:沒有對字串中的英文逗號進行特殊處理
工具/原料
Java
IntelliJ IDEA
方法/步驟
先上個預期的結果圖:
結果檔案有三列,表頭分別為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 CsvWriter {
public static void main(String[] args) throws IOException {
List
CsvWriter csvWriter = new CsvWriter();
csvWriter.write(source);
} private static List
String title = "id,Name,Desc";
List
source.add(title);
source.add(String.format("1,Tom,%s", "My name is tom."));
source.add(String.format("2,Jim,%s", "My name is Jim,twenty years old"));
source.add(String.format("3,John,%s", "My name is John.Hello!"));
return source;
} public void write(List
File file = new File("result.csv");
System.out.println(file.getAbsolutePath());
FileWriter fw = new FileWriter(file);
for (String line : source) {
fw.write(String.format("%s \n", line));
}
fw.flush();
fw.close();
}
}
執行上述程式碼,
看看生成的結果檔案是什麼樣的。
咦,怎麼第三行的“twenty years old ”到第四列了
看看原因:
id,Name,Desc
1,Tom,My name is tom.
2,Jim,My name is Jim,twenty years old
3,John,My name is John.Hello!
原來,每二行記錄的第三列的字串中有英文逗號,而csv格式的檔案是使用英文逗號分隔不同欄位值的。
csv解析器在展示csv檔案的內容時,把“twenty years old”展示到第四列了
解決辦法:
給第三列字串加雙引號
更改程式碼,因為字串外面已經有雙引號了,需要將新增的雙引號進行轉義
Code:
source.add(String.format("2,Jim,\"%s\"", "My name is Jim,twenty years old"));
看看生成的結果與實際是否一致
是一致的!!
OK