"
package test;
import java.io.BufferedReader; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths;
public class TestTest {
public static void main(String[] args) throws IOException {
// BufferedReader br=Files.newBufferedReader(Paths.get("data/tmp2.txt")); BufferedReader br=Files.newBufferedReader(Paths.get("/home/username/Documents/TokenizeThenSplitParallelDeletePatternLTZero.txt")); //BufferedReader br=Files.newBufferedReader(Paths.get("/home/username/Documents/temp.txt")); int cnt=0; while(br.ready()){ String text = br.readLine(); cnt++; if(cnt>=47334){ System.out.println(text); } System.out.println("cnt = "+cnt); } }
}
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 2
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at test.TestTest.main(TestTest.java:17)
百度之后的结果都是对java NIO Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1这种的回答。我的文件是utf-8编码的,文件很大,所以就没有上传了。但是当我将第一行到出错那行后面一点儿的所有内容,复制到一个新文件temp.txt中,再次运行,又不会出错了,不知道为什么。
"
"
public static void main(String[] args) throws IOException { File file = new File("/home/yangxiaohuan/Documents/TokenizeThenSplitParallelDeletePatternLTZero.txt"); InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");// 考虑到编码格式 BufferedReader br = new BufferedReader(read); int cnt=0; while(br.ready()){ String text = br.readLine(); cnt++; if(cnt>=47334){ System.out.println(text); } System.out.println("cnt = "+cnt); } } }
原来的代码需要导入下面的类
import java.nio.file.Files;
import java.nio.file.Paths;
但是换成这种形式
import java.io.File;
import java.io.FileInputStream;
就是正常的,没有出错。
而且还有朋友说,将原来的文本里面,将出错的那一行,删去一个字符也是不会报错的。很奇怪的问题。不知道为啥用nio.file.Files就是有问题的
谢邀。你可能搞错了IO和NIO之间的区别,最基本的一点是IO是面向流的,NIO面向缓冲区的,而你的代码很明显是使用了BufferedReader以及InputStreamReader流,如果使用nio,readLine根本不能读取,NIO只能读取缓冲区,扫描缓冲区的大小,并且在解析数据时,比起阻塞IO流,NIO需要付出更大的代价。
"版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。