在“ZipFile zipfile = new ZipFile(”X“)中设置路径X;”

时间:2010-09-29 17:55:22

标签: java servlets zipfile

我在ZipFile zipfile = new ZipFile("X");中设置zip文件路径X时遇到问题。

我不想对路径进行硬编码,使其成为ZipFile zipfile = new ZipFile("C:/docs/data.zip"); 我想做点什么:

ZipFile zipfile = new ZipFile(getServletContext().getResourceAsStream("/WEB-INF/" + request.getAttribute("myFile").toString());

通过选择用户确定zip文件的路径。但是,这会产生错误,因为这只适用于InputStream。

以前,我已经检索了multipart / form数据并获得了zip文件的真实路径:

String path = getServletContext().getRealPath("/WEB-INF");
UploadBean bean = new UploadBean();
bean.setFolderstore(path);
MultipartFormDataRequest multiPartRequest = new MultipartFormDataRequest(request);
bean.store(multiPartRequest); //store in WEB-INF

// get real path / name of zip file which is store in the WEB-INF
Hashtable files = multiPartRequest.getFiles();
UploadFile upFile = (UploadFile) files.get("file");
if (upFile != null) request.setAttribute("myFile", upFile.getFileName());

对此有何解决方案?

2 个答案:

答案 0 :(得分:2)

您可以通过两种方式将webcontent-relative路径转换为绝对磁盘文件系统路径:

  1. 只需像以前一样使用ServletContext#getRealPath()

    ZipFile zipfile = new ZipFile(getServletContext().getRealPath("/WEB-INF/" + request.getAttribute("myFile").toString()));
    
  2. 请改用ServletContext#getResource()。它返回URL。点击getPath()就可以了。

    ZipFile zipfile = new ZipFile(getServletContext().getResource("/WEB-INF/" + request.getAttribute("myFile").toString()).getPath());
    
  3. 方式#1是首选。

答案 1 :(得分:1)

我不明白为什么你不使用你已经拥有的真实路径。

无论如何,您可以使用ZipInputStream

这样您就可以将文件作为简单的Stream处理。唯一不同的是您无法直接访问的getName()方法和size()。使用ZIS,您将能够阅读每个条目。


资源: