我想知道如何從Java代碼生成的文本文件中用下面的代碼刪除^ M個字符。如何從獨立於平臺的文本文件中使用Java刪除^ M個字符?
public StringBuilder toCsv(Table table) {
StringBuilder stringBuilder = new StringBuilder();
String csv = new String();
for (Column cName : table.getColumns()){
csv += QUOT;
csv += cName.getName();
csv += QUOT;
csv += CSV_SEPERATOR;
}
csv += "\n";
stringBuilder.append(csv);
for (Row row : table) {
Collection<Object> values = row.values();
String csvString = "";
if (values.size() == 10) {
String ep = QUOT + CSV_SEPERATOR + QUOT ;
csvString = StringUtils.join(row.values(),ep);
csvString.replaceAll("\'", "");
csvString = QUOT + csvString + QUOT;
logger.info("line ++++ " + csvString);
}
stringBuilder.append(csvString);
stringBuilder.append("\n");
}
return stringBuilder;
}
然後我使用下面的方法將數據寫入到文件
public void writeCsv(String data, String path, String fileName) throws IOException {
String completePath = path + "/" + fileName;
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(completePath)));
try {
out.write(data);
} finally {
out.close();
}
}
語境
我生成使用http://jackcess.sourceforge.net/從Microsoft Access(.mdb)文件的CSV文件。當我生成csv並使用vim打開時,我會在行中看到很多^ M。注:我在MacOS
我曾嘗試下面寫到csv
csvLine.replaceAll("\n\r", "");
和
csvLine.replaceAll("\r\n", "");
和
之前刪除^ M(我相信這是一個微軟Windows CARRIAGE_RETURN)csvLine.replaceAll("\\r", "");
生成的CSV
'10773.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'10000.0';'';'2102.0'
'10001.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'Pet Soup cash';'087470^M
^M
^M
087470';'-45000.0';'';'2102.0'
'10360.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'37000.0';'';'2101.0'
'10444.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'By Cash';'';'2000.0';'';'2101.0'
正如你可以看到上面的一行中的CSV被破壞了^ M,這是不希望的。 我需要以編程方式從文件中刪除這些字符。除去^ M和行進線
'10001.0';'';'';'';'Thu Jul 14 00:00:00 CEST 2016';'Pet Soup cash';'087470087470';'-45000.0';'';'2102.0'
任何幫助後
預期的輸出將受到讚賞。
看起來很奇怪,我的意思是,在一個看起來像一個數字的字段中有奇怪的字符。 –
能否請您在閱讀mdb後顯示如何編寫csv文件的確切代碼? –
@Würgspass - 更新代碼 – amjad