您好,我想将 txt 转换为 CSV 文件。在我的 txt 文件中,我使用\t 作为分隔符。 所以我的java代码如下所示
public static void main(String[] args) throws Exception {
final Path path = Paths.get("D:\\chat-log\\output\\");
final Path txt = path.resolve("summary_Traders_Violation_Rule2_Conversation.txt");
final Path csv = path.resolve("Rule2.csv");
try (
final Stream<String> lines = Files.lines(txt);
final PrintWriter pw = new PrintWriter(Files.newBufferedWriter(csv, StandardOpenOption.CREATE_NEW))) {
lines.map((line) -> line.split("\t")).
map((line) -> Stream.of(line).collect(Collectors.joining(","))).
forEach(pw::println);
}
}
它创建 CSV 文件时出现异常,并且 csv 文件不包含 txt 文件中的完整数据。在第 4 列值开始抛出异常时,直到第 1、2、3 列之前只有空白值是可以的。
Exception in thread "main" java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1
at java.io.BufferedReader$1.hasNext(Unknown Source)
at java.util.Iterator.forEachRemaining(Unknown Source)
at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Unknown Source)
at java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.util.stream.ReferencePipeline.forEach(Unknown Source)
at XPathEx.TxtToCsv.main(TxtToCsv.java:24)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
... 10 more
最佳答案
Files.lines(Path)
打开文件以 UTF-8 作为字符集进行读取,并且您的文件似乎包含一些非 UTF-8 数据。
检查您需要哪个字符集,然后使用Files.lines(Path path, Charset cs)
相反。
关于java - 使用 java 8 将 txt 转换为 csv 不适用于大内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252669/