为什么会出错?(java.nio.charset.输入长度= 1)

wbgh16ku  于 2023-03-21  发布在  Java
关注(0)|答案(3)|浏览(89)

Java代码:

String fileName = "settings.txt";

 String text = "AdresProgramm =";
 String delimiter = ";";

 Optional<String> result =
 Files
     .lines(Paths.get(fileName))
     .filter(e -> e.contains(text))
     .map(e -> {
         int start = e.indexOf(text);
         int end = e.indexOf(delimiter, start + text.length());

             return e.substring(start, end);
     })
     .findFirst();

 result.ifPresent(System.out::println);

文件内容:AdresProgramm =D:\\ЭСЧФ\;
输入错误异常:输入长度= 1

wwtsj6pe

wwtsj6pe1#

这看起来像是一个编码问题,因为你使用的是西里尔字母。
认为ISO-8859-1编码显然适用于欧洲字符。不确定UTF-8是否适用。
你看过this页面吗?

uz75evzq

uz75evzq2#

Files.
lines(Paths.get(fileName), Charset.forName("windows-1251"))
c9qzyr3d

c9qzyr3d3#

这不是一个答案,但可能对其他在编写代码以读取大型机文件时面临此问题的人有用。
像下面这样使用:

List<String> allLines = Files.readAllLines(path,StandardCharsets.ISO_8859_1);

IBM称之为代码页819或CP819。如果您正在处理来自大型机系统的扩展二进制格式文件,这将是一个救命稻草。

相关问题