我有一个 csv 文件,如下(控制字符以粗体显示)
"ID","NAME","CLASS"CRLF "1","JOHN X","A"CRLF "2","DOELF Y","B"CRLF "3","OTHER S", "D"CRLF
请注意,第 3 行以 LF 而不是 CRLF 结尾。在用 Java 读取此 CSV 文件时,我得到 5 行而不是 4 行(标题行 + 3 数据行)。有没有办法可以用空格替换 LF,同时保留 CRLF(修改输入文件或更改 java 代码)。我做了很多谷歌搜索,我可以看到每个解决方案都将 LF 与 CRLF 一起替换。
谢谢
最佳答案
您可以使用分隔符为 \n
的扫描仪
。使用 jlordo 的技术来消除 LF
,您可以一次一行地将内容写入某个 OutputStream
。这样你就永远不会在内存中保存整个 2GB 以上的文件
public static void main(String[] args) throws Exception {
File file = new File("C:\\Users\\Soto\\Downloads\\person.xml");
Scanner scanner = new Scanner(new FileInputStream(file));
String lineSeparator = System.getProperty("line.separator"); // Assuming you are on Windows, otherwise set it to \n
scanner.useDelimiter(lineSeparator);
ByteArrayOutputStream out = new ByteArrayOutputStream(); // would be a real outputstream, like FileOutputStream
char LF = 0xA;
while (scanner.hasNext()) { // looks up to the next delimiter
String line = scanner.next();
line = line.replace("" + LF, "");
out.write(line.getBytes());
out.write(lineSeparator.getBytes());
}
// the OutputStream now contains the content with new lines but no LF
}
LF
是十六进制 A
,参见 here .
关于java - CSV 保留 CRLF 同时替换 LF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18581618/