用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等。

猜你喜欢

转载自blog.csdn.net/qq_24787615/article/details/81519216