j2ee:读取文件时出现问题-charset.malformedinputexception

cbwuti44  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(268)

我对这行代码有问题:

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系列)(不是我的电脑)上执行war文件时,这一行有问题:

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

我得到一个

java.nio.file.AccessDeniedException: <fileName>

它在我的电脑(windows10家庭)上运行得很好,不过,使用的是同样的战争。

ryevplcw

ryevplcw1#

如果您知道正在读取的文件的字符编码,那么在类中使用方法行(path,charset) java.nio.file.Files . 从您的评论来看,文件编码似乎是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()));

相关问题