我正在用Java创建一个简单的wordcount程序,它可以读取目录的基于文本的文件。
然而,我不断地得到错误:
java.nio.charset.MalformedInputException: Input length = 1在这一行代码中:
BufferedReader reader = Files.newBufferedReader(file,Charset.forName("UTF-8"));我知道这可能是因为我使用了一个Charset,它不包括文本文件中的一些字符,其中有些包含其他语言的字符。但我想把这些角色包括进去。
后来我在JavaDocs上了解到,Charset是可选的,只用于更有效地读取文件,因此我将代码更改为:
BufferedReader reader = Files.newBufferedReader(file);但是有些文件仍然会抛出MalformedInputException。我也不知道原因。
我想知道是否有一个包罗万象的Charset ,它允许我读取许多不同类型的字符的文本文件。
谢谢。
发布于 2017-03-17 06:40:18
你可以尝试像这样的东西,或者只是复制和过去的片段。
boolean exception = true;
Charset charset = Charset.defaultCharset(); //Try the default one first.
int index = 0;
while(exception) {
try {
lines = Files.readAllLines(f.toPath(),charset);
for (String line: lines) {
line= line.trim();
if(line.contains(keyword))
values.add(line);
}
//No exception, just returns
exception = false;
} catch (IOException e) {
exception = true;
//Try the next charset
if(index<Charset.availableCharsets().values().size())
charset = (Charset) Charset.availableCharsets().values().toArray()[index];
index ++;
}
}https://stackoverflow.com/questions/26268132
复制相似问题