今天在做大数据同步的时候遇到了大文件压缩的问题,就是我指定一个文件(不是文件夹),然后压缩它,发现压缩没有文件名。
文件压缩工具类是百度的,然后仔细查看了一下代码发现,对于单个文件的压缩我们可以指定源文件、输出文件、目标文件。我们如果将目标文件指定成一个文件名的话,那么就代表你压缩的文件里面的文件名了。代码如下:
/**
* @param srcPath 源文件路径
* @param outStream 输出文件路径
* @param destFileName 目标文件
* @throws Exception 异常抛出
*/
public static void zip(String srcPath, String outStream,String destFileName)
throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
outStream));
zip(out, new File(srcPath), destFileName);
log.debug("压缩完成!");
out.closeEntry();
out.close();
}
/**
*
* 压缩文件
*
* @param out
* org.apache.tools.zip.ZipOutputStream
*
* @param file
* 待压缩的文件
*
* @param base
* 压缩的根目录
*/
private static void zip(ZipOutputStream out, File file, String base)
throws Exception {
if (file.isDirectory()) {
File[] fl = file.listFiles();
base = base.length() == 0 ? "" : base + File.separator;
for (int i = 0; i < fl.length; i++) {
zip(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
log.debug("添加压缩文件:" + base);
FileInputStream in = new FileInputStream(file);
int b;
while ((b = in.read()) != -1) {
out.write(b);
}
in.close();
}
}