我有一个zip文件,我想从现在提取文件,我有这个代码应该通过Spring控制器发送该文件。
0x77DD77
我遇到的问题是,每次运行此代码时,0x0077DD77
都会返回null,这意味着 //This code is in a Spring Controller to send the screenshot.
ZipFile file = new ZipFile("path/to/zipFile.zip");
try(InputStream is = searchImage(screenshotFileName, file)){
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/png");
ServletOutputStream servletOutputStream = response.getOutputStream();
IOUtils.copy(is,servletOutputStream);
}catch (IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
private InputStream searchImage(String screenshotFileName, ZipFile file) throws IOException{
ZipEntry entry = file.getEntry(screenshotFileName);
if(entry != null){
return file.getInputStream(entry);
}
return null;
}
方法找不到屏幕截图。我查看了zip文件,我知道截图文件存在于压缩文件中。我错了吗?我正在查找的zip文件确实有很多子目录,我是否需要搜索那些以查找截图?
答案 0 :(得分:0)
我能够使用FileSystem
以不同的方式从zip文件中提取单个文件。您可以使用此代码
File outputFile = new File("C:\\" + screenshotFileName);
Path zipFile = Paths.get("\\path\\to\\Zip.zip");
FileSystem fileSystem = FileSystems.newFileSystem(zipFile,null);
Path source = fileSystem.getPath(screenshotPath);
Files.copy(source, outputFile.toPath());
现在可以轻松创建输入流,因为zip中的文件不在C:\screenshotFileName
。无需使用ZipEntry
类来解决此问题。