用InputStream字节流读取文件内容的一种方式(文件包含汉字)

汉字所占的字节个数会随着编码格式的不同而变化,但是可以肯定地一点是,不管是什么编码格式,汉字占有的的字节个数肯定都不止一个字节,所以用字节(数组)来读取含有汉字的文件时,可能会产生乱码,下面我用数组拼接的方式来读汉字,就不会产生乱码了。上代码:

//用字节流读取文件并输出
    private static void m1() throws Exception{
        InputStream is = new FileInputStream("d:/abc.txt");
        byte[] b = new byte[4];//用来取字节流的数组
        byte[] b1 =new byte[b.length];//用来拼接字节流的数组
        int cc;
        boolean flag = true;//第一次进入循环,则直接把b数组拷贝给b1
        while((cc = is.read(b)) != -1) {
            if(flag) {
                b1 = Arrays.copyOf(b, b.length);
            }else {
                b1 = Arrays.copyOf(b1, b1.length+cc);
                System.arraycopy(b, 0, b1, b1.length-cc, cc);//给b1数组拼接
            }
            System.out.println(Arrays.toString(b));
            System.out.println(Arrays.toString(b1));
            flag = false;//从第二次循环开始,就执行else块中的代码了
        }
        System.out.println(new String(b1,0,b1.length));//最终打印的就是从文件取出的内容
        is.close();
    }

 不过有一点需要注意:文件的格式必须要跟当前eclipse中的文件的格式保持一致,不然还是会乱码,utf-8对应utf-8,文件格式ANSI对应GBK或者GB2312等。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值