我想知道如何从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