Java文件压缩与解压缩(一)(二)
int len = 0;
while ((len = fis.read()) != -1){
zos.write(len);
}
fis.close();
//流关闭错误!
//zos.close();
} catch (Exception e) {
}
}
/**
* @param willZipDirctoryPath 原目录所在路径
* @param willZipedDirectory 原目录
* @param zos 压缩流
* 注意:
* 在处理空文件夹的时候
* getEntryName2(willZipDirctoryPath, willZipedDirectory)+"/"
* 中的"/"是必不可少的
*/
public void dirToZip2(String willZipDirctoryPath,File willZipedDirectory, ZipOutputStream zos) {
if (willZipedDirectory.isDirectory()) {
File[] files = willZipedDirectory.listFiles();
//处理空文件夹的情况
if (files.length==0) {
ZipEntry zipEntry=new ZipEntry
(getEntryName2(willZipDirctoryPath, willZipedDirectory)+"/");
try {
zos.putNextEntry(zipEntry);
} catch (Exception e) {
e.printStackTrace();
}
return;
}
for (int i = 0; i < files.length; i++) {
File file = files[i];
//若是文件,递归调用fileToZip()
if (file.isFile()) {
fileToZip2(file.getAbsolutePath(), zos);
}
//若是文件,递归调用dirToZip()
if (file.isDirectory()) {
dirToZip2(file.getAbsolutePath(),file, zos);
}
}
}
}
/**
* @param rawPath 需要压缩的目录或者文件的完整路径
* @param file 需要压缩的文件或者目录
* @return entryName
*
* 该方法返回EntryName,表示从最外层目录开始到该文件(目录)
* 的完整路径
* 备注:
* 1 该示例中文件均存放在某盘下,如E:\所以rawPath.substring(3);
* 2 注释中"@param file 需要压缩的文件或者目录".其实绝大多数情况下
* 都是文件,只有一种情况是目录,就是空文件夹的情况.
*/
public String getEntryName2(String rawPath,File file){
try {
String rawDir=rawPath.substring(3);
int rawDirIndex=file.getAbsolutePath().indexOf(rawDir);
String entryName=file.getAbsolutePath().substring(rawDirIndex);
return entryName;
} catch (Exception e) {
}
return null;
}
/**
* @param zipedFilePath 原压缩文件的路径
* @param unzipPath 文件解压后的路径
* 对于文件或者目录操作的小梳理:
* 1 对于目录应该先执行file.mkdir(s)()才可以
* 往里面其下存入文件.比如:
* File f=new File("F:\\test\\x.txt");
if (!f.exists()) {
f.createNewFile();
}
这当然要报错,因为x.txt的所在目录还不存在!!
所以应该改正为:
File f=new File("F:\\test\\x.txt");
f.getParentFile().mkdirs();
if (!f.exists()) {
f.createNewFile();
}
2同样的道理
File f=new File("F:\\test\\x.txt");
if (f.isFile()) {
System.out.println("true");
}else{
System.out.println("false");
}
结果为false
3类似的问题
File f=new File("F:\\x.txt");
if (f.isFile()) {
System.out.println("true");
}else{
System.out.println("false");
}
结果为false
因为只是new了一个File,并没有创建!!!
File f=new File("F:\\x.txt");
f.createNewFile();
if (f.isFile()) {
System.