2 zkzk7410 zkzk7410 于 2017.04.20 19:41 提问

『小白求指点』字节流读取进来后显示乱码

小弟初学JAVA,现在遇见的问题是用字节流导入文本后打印显示的是乱码,找不出哪里有问题了,请求大神指点啊,非常感谢啊!!
图片说明

3个回答

weixin_38405298
weixin_38405298   2017.04.20 20:22
已采纳

public static void main(String[] arge) {

    File file = new File("D:\\test.txt");

    try {
        FileInputStream fis = new FileInputStream(file);    // new 一个字节流;

        @SuppressWarnings("resource")
        InputStreamReader isr  =  new InputStreamReader(fis);  //将字节流转换成字符流;

        char[] ch = new char[1000];         //创建字符数组;

        while( isr.read(ch) != -1 )          //  输出数组;
        {           

            System.out.println(ch);

            }            
zkzk7410
zkzk7410 谢谢大神,你的这个方法将字节流专程字符流,再创建字符数组打印完美实现了小弟的需求。但是我的方法哪里有问题,我想找出来,感觉都对着。
4 个月之前 回复
u011617151
u011617151   2017.04.21 12:10

读取字节 你的写法 会有负数 不存在ascii 编码 所以会乱码 应该这样写
FileInputStream fis = new FileInputStream(file); // new 一个字节流;
int len = fis.available(); //获取文件流中文件内容的字节长度
byte[] buf = new byte[len]; //创建一个缓存
fis.read(buf);//读取对应长度的字节内容到缓冲中
System.out.println(new String(buf,0,len));

zkzk7410
zkzk7410 谢谢! 以后这种就直接转成数组来操作,读取字节会出问题,非常感谢!
4 个月之前 回复
zkzk7410
zkzk7410   2017.04.21 21:18

这个我今天理解了,一个汉字是由多个字节组成的

while(b!=-1){
char ch=(char) b;
System.out.print(ch);
b=fin.read();
}

用字节流读取单个字节,等于将汉子分开来显示,所以出来的是乱码,应该是这个原因吧。

Csdn user default icon
上传中...
上传图片
插入图片