J2EE:读取文件字符集的问题.格式不正确的输入异常



我对这行代码有问题:

Map<String, Long> wordCounts = Files.lines(Paths.get(fileSource))
.flatMap(line -> pattern.splitAsStream(line))
.collect(Collectors.groupingBy(String::toLowerCase,
TreeMap::new, Collectors.counting()));

如果我从Intellij运行,它运行良好
如果我打包我的应用程序(Maven(并使用运行它

java-jar myapp.war

我收到这个错误:

Caused by: java.nio.charset.MalformedInputException: Input length = 1

我不知道为什么。

[更新]通过这种方式,正在创建文件。

Path path = Paths.get(newTxtName);
try {
BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8);
writer.append(parsedDocx);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}

但当我在另一台服务器(windows 10系列((而不是我的电脑(上执行战争文件时,这一行有问题:

Map<String, Long> wordCounts = Files.lines(Paths.get(fileSource), Charset.forName("UTF-8"))

我有

java.nio.file.AccessDeniedException: <fileName>

它在我的电脑(windows 10家庭(上运行良好,尽管有同样的战争。

如果您知道正在读取的文件的字符编码,那么在类java.nio.file.Files中使用方法行(Path,Charset(。从您的评论中可以看出,文件编码是UTF-8。所以你的问题中的代码应该是:

Map<String, Long> wordCounts = Files.lines(Paths.get(fileSource),
Charset.forName("UTF-8"))
.flatMap(line -> pattern.splitAsStream(line))
.collect(Collectors.groupingBy(String::toLowerCase,
TreeMap::new, Collectors.counting()));

相关内容

最新更新