我在collect()方法调用(或toList()调用上)得到UnmappableCharacterException:
private static void handleTransaction(Path a_filePath, String a_sTrasactionName, String a_sTransactionFilePath) {
// read file into stream, try-with-resources
try (Stream<String> stream = Files.lines(Paths.get(a_filePath.toString()), Charset.defaultCharset())) {
List<String> list =
stream.filter(line -> (line.indexOf(a_sTrasactionName) > 0))
.collect(Collectors.toList());
list.forEach(line -> {
System.out.println(line);
try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(_FILES_PATH + a_sTransactionFilePath),Charset.defaultCharset(), StandardOpenOption.APPEND)) {
writer.write(line + "\n");
} catch (IOException e) {
e.printStackTrace();
}
});
} catch (IOException e1) {
e1.printStackTrace();
}
它曾经为我工作过一次,但从那时起就没有。
我读过的文件是在solaris上创建的csv文件。我在Windows 2012服务器上运行jar
你能告诉我吗?
谢谢。
答案 0 :(得分:5)
那么那可能就是问题了。您正在使用platform-default编码来读取和写入文件。如果文件是在Solaris上创建的,那么很可能对Windows框具有不同的平台默认编码。我读过的文件是在solaris上创建的csv文件。我在Windows 2012服务器上运行jar
如果您知道正在阅读的文件的编码,请指定。
如果你控制你正在阅读和写作的文件的编码,我强烈建议使用UTF-8,除非你有充分的理由不这样做。
仅使用Charset.default()
如果您正在阅读您知道的文件使用平台默认编码,或者您正在编写一个文件你肯定希望使用平台默认编码 - 并尽量避免使用后者。
(基本上,一切都以UTF-8编码的世界是一个更简单的世界......)
答案 1 :(得分:3)
老实说,我甚至不确定这是否是答案,但我想提供帮助。我遇到了同样的问题并使用了:
val source = io.Source.fromFile("C:/mon_usatotaldat.csv").codec.decodingReplaceWith("UTF-8")
我得到了输出:
来源:scala.io.Codec = windows-1252