ZipEntry getEntry()始终返回null

时间:2017-08-03 16:56:16

标签: java file-io zip

我有一个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文件确实有很多子目录,我是否需要搜索那些以查找截图?

1 个答案:

答案 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类来解决此问题。