java 实现zip文件上传并解压
时间: 2023-05-30 19:04:45 浏览: 943
java上传并自动解决ZIP文件
5星 · 资源好评率100%
以下是Java实现zip文件上传并解压的示例代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
@WebServlet("/upload")
@MultipartConfig // 必须加上此注解才能处理文件上传
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
// 获取文件名
String fileName = filePart.getSubmittedFileName();
// 获取文件输入流
FileInputStream fileInputStream = (FileInputStream) filePart.getInputStream();
// 创建目标文件
File targetFile = new File(fileName);
FileOutputStream fileOutputStream = new FileOutputStream(targetFile);
// 将上传的文件写入到目标文件中
byte[] buffer = new byte[1024];
int len;
while ((len = fileInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
}
fileInputStream.close();
fileOutputStream.close();
// 解压文件
unzip(targetFile);
// 输出成功信息
response.getWriter().println("文件上传并解压成功!");
}
private void unzip(File zipFile) throws IOException {
// 创建解压目录
String unzipDir = zipFile.getName().substring(0, zipFile.getName().lastIndexOf('.'));
File unzipDirFile = new File(unzipDir);
unzipDirFile.mkdirs();
// 创建ZipInputStream
ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFile));
// 循环读取ZipEntry
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
String entryName = zipEntry.getName();
String entryPath = unzipDir + File.separator + entryName;
if (zipEntry.isDirectory()) {
// 如果是目录,则创建目录
new File(entryPath).mkdirs();
} else {
// 如果是文件,则写入文件
FileOutputStream fileOutputStream = new FileOutputStream(entryPath);
byte[] buffer = new byte[1024];
int len;
while ((len = zipInputStream.read(buffer)) != -1) {
fileOutputStream.write(buffer, 0, len);
}
fileOutputStream.close();
}
zipEntry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();
zipInputStream.close();
}
}
```
该代码使用了Servlet 3.0规范的`@MultipartConfig`注解来处理文件上传,通过`request.getPart("file")`方法获取上传的文件。然后将文件写入到目标文件中,并调用`unzip()`方法解压文件。`unzip()`方法使用`ZipInputStream`读取zip文件中的每个`ZipEntry`,如果是目录则创建目录,如果是文件则写入文件。解压完成后,输出成功信息。
阅读全文