admin管理员组

文章数量:1650772

先说下需求  不是说文件内容的读取

主要是想做文件加密

然后我发现我只能加密txt文件

按理来说不对啊 读的都是文件流  什么文件不应该都一样  doc pdf什么的不应该一把梭  何况好久没用java了  我就查查查 

后来解决方式如下

代码大致如下:

FileInputStream input = null;
        FileOutputStream out = null;
        try {
            input = new FileInputStream("src/12.doc");
            System.out.println(input.available());
            int length = input.available();
            byte [] buffer = new byte[32];
            int times = length/32 + 1;
            int count = 0;
            while(count < times) {
                count++;
                input.read(buffer);
                out = new FileOutputStream("src/cc",true);//追加模式
                out.write(buffer,0,32);
                System.out.println(count);
                if (count==times) {
                    for(int i=0;i<32;i++) {
                        System.out.println(buffer[i]);
                    }
                }
                //System.out.println(input.read());
            }
        }catch(Exception e) {
            System.out.println(e.toString());
        }

 

首先使用fileinputstream流是肯定没毛病的  那问题出在哪 就是说你的每次读的字节数不要自动求长度(int length = input.read(buffer))因为会有问题 像doc 之类的文档里面有很多0x00 字节 而且java里面byte的范围是 -128-127  也就是说文件中的某个字节是0xff是它不会读成255  会都成 -1   所以length值是不准确的

最后上面代码也不是万能的 缺陷在于文件的大小字节数得在int最大范围里面 否则文件太大也是无法获取长度的  具体肯定有解决方式  

总结:现在写代码比以前要想得多  可能是做了相关的项目原因吧  以前是能运行就行 现在是要做的好 做的不出错 做的更加完善

本文标签: 加密文件文件Java