我在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();
}
Run Code Online (Sandbox Code Playgroud)
它对我有用,但从那时起从未如此.
我读的文件是在solaris上创建的csv文件.我在Windows 2012服务器上运行jar
你能告诉我吗?
谢谢.
我读的文件是在solaris上创建的csv文件.我在Windows 2012服务器上运行jar
那么这可能是问题所在.您正在使用platform-default编码来读取和写入文件.如果文件是在Solaris上创建的,那么很可能对Windows框具有不同的平台默认编码.
如果您知道正在阅读的文件的编码,请指定该编码.
如果你控制你正在阅读和写作的文件的编码,我强烈建议使用UTF-8,除非你有充分的理由不这样做.
只有使用Charset.default()
如果你正在读你一个文件知道使用平台的默认编码,或者如果你正在写,你绝对是一个文件要使用平台的默认编码-并尽量避免后者.
(基本上,一切都以UTF-8编码的世界是一个更简单的世界...)