关于FileInputStream中的一个read()方法
想搞一下压缩和解压缩的进度显示,这是书上的代码,我稍微改了一下,FileInputStream里面有一个read()方法,通过输入流读取文件返回的数据类型是int,这里不太明白。而我通过length()方法返回的是文件的字节长度,怎么解决呢
package csy;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class csyFileTest{
public csyFileTest(String zipFileName,File file)throws Exception{
System.out.println("压缩中");
zip(zipFileName,file);
System.out.println("length:"+new File(zipFileName).length());
}
private void zip(String zipFileName,File file)throws Exception{//zipFileName:压缩文件存放路径 file:未压缩文件
FileOutputStream outputStream=new FileOutputStream(zipFileName);
ZipOutputStream out=new ZipOutputStream(outputStream);//定义一个压缩文件流,将压缩文件流输入此录入点
zip(out,file,"");
out.close();
outputStream.close();
}
private void zip(ZipOutputStream out,File file,String base)throws Exception{
if(file.isDirectory()){//如果该文件是一个目录
File[] f=file.listFiles();//将该文件目录下的所有文件及目录存入f数组当中
if(base.length()!=0){//若目录路径不为空
out.putNextEntry(new ZipEntry(base+"/"));//新建一个目录进入点,将压缩流对应此录入点
for(int i=0;i<f.length;i++){
zip(out,f[i],f[i].getPath());//将当前文件目录路径下所有的文件及目录进行遍历
}
}else{
for(int i=0;i<f.length;i++){
zip(out,f[i],base+f[i]);//将当前文件目录路径下所有的文件及目录进行遍历
}
}
}else{//如果该文件是一个文件而不是目录
out.putNextEntry(new ZipEntry(base));
System.out.println(base);
FileInputStream in=new FileInputStream(file);//新建一个输入文件流
int b=0;
while((b=in.read())!=-1){//读取当前文件中的字节数据直至流末尾
out.write(b);//将字节数据写入输出流
}
in.close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
csyFileTest test=new csyFileTest("D://csy.zip",new File("D:/csy"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("压缩完成");
}
}