1

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

我不想对路径进行硬编码,使其变为ZipFile zipfile = new ZipFile("C:/docs/data.zip");.
我想做类似的事情:

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

其中 zip 文件的路径由用户的选择决定。但是,这会产生错误,因为这仅适用于 InputStream。

以前,我已经检索了多部分/表单数据并获得了 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());

有什么解决办法吗?

4

2 回答 2

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());
    

方法#1 是首选。

于 2010-09-29T18:07:56.950 回答
1

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

无论如何,您可以使用ZipInputStream.

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


资源 :

于 2010-09-29T17:59:05.380 回答