![](/img/trans.png)
[英]How to wrap the cell when writing CSV file using CSVWriter in OpenCSV in java?
[英]^M characters showing in CSV file generated using opencsv.CSVWriter
Csv 編寫代碼
private void writeReversalPendingCsv(List<String[]> elements) throws IOException {
BufferedWriter writer = null;
CSVWriter csvWriter = null;
String fileName = null;
..
writer = new BufferedWriter(new FileWriter(filePath));
Character sep = new Character('|');
csvWriter = new CSVWriter(writer,
sep,
new Character('\0'),
CSVWriter.DEFAULT_ESCAPE_CHARACTER,
CSVWriter.DEFAULT_LINE_END);
for (String[] row : elements) {
csvWriter.writeNext(row);
}
Csv 在 vim 模式下 -
2|value|hello^M
2|value2|hello2
CSV 讀數
在寫這部分之前,我還看了一個相同格式的csv。
Scanner scanner = new Scanner(file.getInputStream());
List<String[]> reversalPending = new ArrayList<>();
scanner.useDelimiter("\\n");
int totalRows = 0;
while (scanner.hasNext()) {
..
String line = scanner.next();
String[] arr = line.split("\\|");
.. processing
if(processing fails) {
reversalPending.add(arr);
writeReversalPendingCsv(reversalPending);
}
}
我處理每一行並根據某些條件,獲取這些行並將它們寫入 csv 文件。
所以,我的整體邏輯是——
如果我使用 csv 的 output 中的 csv 文件寫入並輸入相同的流程,則處理有效,但我得到了額外的 ^M -
2|value|hello^M^M
2|value2|hello2
我應該防止這種情況嗎? 怎么樣,如果是這樣?
在 vim 中, ^M
用於顯示\r
回車字符(有關其他“看起來很奇怪的字符”,請參閱此內容)。
\r\n
被 windows 用作“行尾”,而 unix 僅使用\n
。
這里發生的情況是您的輸入文件使用\r\n
作為行結尾, \r
沒有被Scanner
“吃掉”並最終出現在字符串中,因為您僅指定\n
作為分隔符。
將\r\n
設置為定界符可以解決問題或更好\r?\n
因為useDelimiter()
的輸入是正則表達式, ?
在\r
之后意味着\r
是可選的,通過這種方式,它將與從 windows 編寫的文件和從類 unix 系統編寫的文件一起正常工作。
scanner.useDelimiter("\r?\n");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.