import cn.hutool.core.io.FileUtil;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.ArrayUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @program: SpringBlade
* @description: ZipUtils
* @author: wj
* @create: 2020-04-20 14:17
**/
public class ZipUtils {
public static void main(String[] args) throws Exception {
/** 测试压缩方法 */
String path="D:\\BS\\static\\baogaowenjian\\2020\\04\\19\\111";
String zipFile="D:\\BS\\static\\rar\\2020\\04\\19\\111";
FileUtil.mkdir(zipFile);
String rar = zipFile+"\\日报表.rar";
zip(path, rar, false);
}
/**
* 打包
*
* @param dir 要打包的目录
* @param zipFile 打包后的文件路径
* @throws Exception
*/
public static void zip(String dir, String zipFile) throws Exception {
zip(dir, zipFile, false);
}
/**
* 打包
*
* @param dir 要打包的目录
* @param zipFile 打包后的文件路径
* @param includeBaseDir 是否包括最外层目录
* @throws Exception
*/
public static void zip(String dir, String zipFile, boolean includeBaseDir) throws Exception {
// if (zipFile.startsWith(dir)) {
// throw new RuntimeException("打包生成的文件不能在打包目录中");
// }
try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile))) {
File fileDir = new File(dir);
String baseDir = "";
if (includeBaseDir) {
baseDir = fileDir.getName();
}
compress(out, fileDir, baseDir);
}
}
public static void compress(ZipOutputStream out, File sourceFile, String base) throws Exception {
if (sourceFile.isDirectory()) {
base = base.length() == 0 ? "" : base + File.separator;
File[] files = sourceFile.listFiles();
if (ArrayUtils.isEmpty(files)) {
// todo 打包空目录
// out.putNextEntry(new ZipEntry(base));
return;
}
for (File file : files) {
compress(out, file, base + file.getName());
}
} else {
out.putNextEntry(new ZipEntry(base));
try (FileInputStream in = new FileInputStream(sourceFile)) {
IOUtils.copy(in, out);
} catch (Exception e) {
throw new RuntimeException("打包异常: " + e.getMessage());
}
}
}
public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {
// 下载本地文件
// 文件的默认保存名
String fileName = "Operator.doc".toString();
// 读到流中
// 文件的存放路径
InputStream inStream = new FileInputStream("c:/Operator.doc");
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0) {
response.getOutputStream().write(b, 0, len);
}
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void downloadNet(HttpServletResponse response) throws MalformedURLException {
// 下载网络文件
int bytesum = 0;
int byteread = 0;
URL url = new URL("windine.blogdriver.com/logo.gif");
try {
URLConnection conn = url.openConnection();
InputStream inStream = conn.getInputStream();
FileOutputStream fs = new FileOutputStream("c:/abc.gif");
byte[] buffer = new byte[1204];
int length;
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread;
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
将指定文件压缩到指定位置
最新推荐文章于 2024-06-06 16:51:57 发布