Установка пути X в "ZipFile zipfile = new ZipFile (" X ");" - PullRequest
1 голос
/ 29 сентября 2010

У меня проблемы с установкой пути к 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.

Ранее я уже извлек данные 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 ]

2 голосов
/ 29 сентября 2010

Вы можете преобразовать относящиеся к веб-содержимому пути в абсолютные пути файловой системы диска двумя способами:

  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 предпочтителен.

1 голос
/ 29 сентября 2010

Я не понимаю, почему вы не используете реальный путь, который у вас уже есть.

В любом случае, вы можете работать с ZipInputStream.

Таким образом, вы можете справитьсяВаш файл как простой поток.Единственные большие различия - это метод getName() и size(), к которым у вас нет прямого доступа.С ZIS вы сможете читать каждую запись.


Ресурсы:

...