我在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());
对此有何解决方案?
答案 0 :(得分:2)
您可以通过两种方式将webcontent-relative路径转换为绝对磁盘文件系统路径:
只需像以前一样使用ServletContext#getRealPath()
。
ZipFile zipfile = new ZipFile(getServletContext().getRealPath("/WEB-INF/" + request.getAttribute("myFile").toString()));
请改用ServletContext#getResource()
。它返回URL
。点击getPath()
就可以了。
ZipFile zipfile = new ZipFile(getServletContext().getResource("/WEB-INF/" + request.getAttribute("myFile").toString()).getPath());
方式#1是首选。
答案 1 :(得分:1)
我不明白为什么你不使用你已经拥有的真实路径。
无论如何,您可以使用ZipInputStream
。
这样您就可以将文件作为简单的Stream处理。唯一不同的是您无法直接访问的getName()
方法和size()
。使用ZIS,您将能够阅读每个条目。
资源: