2010-09-29 4 views
1

У меня возникают проблемы с установкой пути zip-файла, X, в ZipFile zipfile = new ZipFile("X");.Настройка пути 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()); 

Если путь к файлу почтового индекса определяется выбором пользователя. Но это дает ошибку, потому что это работает только для InputStream.

Ранее я уже извлек/данные форм многокомпонентных и получил реальный путь почтового файла:

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

Какое функциональное требование? Отправить файл пользователю для загрузки? Если да, то почему 'InputStream' недостаточно? – BalusC

ответ

1

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

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

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


Ресурсы:

+0

Спасибо за помощь! – user462033

2

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

  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 является предпочтительным.

+0

+1 для этого решения. Но, как я уже сказал, я действительно не понимаю, почему задан вопрос, тогда как решение уже находится в фрагменте, который дал ОП. –

+0

@Colin: Некоторые люди только copypaste, фактически не понимая, что делает каждая строка кода. – BalusC

+0

Спасибо за помощь. – user462033