java 加密文件 读取(包括任何文件)

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

主要是想做文件加密

然后我发现我只能加密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最大范围里面 否则文件太大也是无法获取长度的  具体肯定有解决方式  

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值