先说下需求 不是说文件内容的读取
主要是想做文件加密
然后我发现我只能加密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最大范围里面 否则文件太大也是无法获取长度的 具体肯定有解决方式
总结:现在写代码比以前要想得多 可能是做了相关的项目原因吧 以前是能运行就行 现在是要做的好 做的不出错 做的更加完善