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

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

我对这行代码有问题:

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

如果我从intellij跑出去,效果很好。
如果我打包我的应用程序(maven)并使用以下工具运行它:
java-jar myapp.war
我得到这个错误:

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

我不知道为什么。
[更新]这样就创建了文件。

  1. Path path = Paths.get(newTxtName);
  2. try {
  3. BufferedWriter writer = Files.newBufferedWriter(path, StandardCharsets.UTF_8);
  4. writer.append(parsedDocx);
  5. writer.close();
  6. } catch (IOException e) {
  7. e.printStackTrace();
  8. }

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

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

我得到一个

  1. java.nio.file.AccessDeniedException: <fileName>

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

ryevplcw

ryevplcw1#

如果您知道正在读取的文件的字符编码,那么在类中使用方法行(path,charset) java.nio.file.Files . 从您的评论来看,文件编码似乎是utf-8。所以你的问题应该是:

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

相关问题