2010-09-29 8 views
1

J'ai des problèmes pour définir le chemin du fichier zip, X, dans ZipFile zipfile = new ZipFile("X");.Définition du chemin X dans "ZipFile zipfile = new ZipFile (" X ");"

Je ne veux pas coder en dur le chemin de sorte qu'il devienne ZipFile zipfile = new ZipFile("C:/docs/data.zip");.
Je veux faire quelque chose comme:

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

Lorsque le chemin du fichier zip est déterminé par la sélection de l'utilisateur. Mais, cela donne une erreur, car cela ne fonctionne que pour InputStream.

Auparavant, je l'ai déjà récupéré les données multipart/form et Gotten le chemin réel du fichier 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()); 

Toute solution à cela?

+0

Quelle est la condition fonctionnelle? Envoyer le fichier à l'utilisateur pour le téléchargement? Si oui, pourquoi 'InputStream' est-il insuffisant? – BalusC

Répondre

1

Je ne comprends pas pourquoi vous n'utilisez pas le chemin réel que vous avez déjà. En tout cas, vous pouvez travailler avec un ZipInputStream. De cette façon, vous pouvez gérer votre fichier comme un simple flux. Les seules grandes différences sont la méthode getName() et size() que vous ne pouvez pas accéder directement. Avec un ZIS, vous serez capable de lire chaque entrée.


Ressources:

+0

Merci pour votre aide! – user462033

2

Vous pouvez convertir des chemins WebContent-relatifs à des chemins de système de fichiers de disque absolu de deux façons:

  1. Il suffit d'utiliser ServletContext#getRealPath() comme vous l'avez déjà fait.

    ZipFile zipfile = new ZipFile(getServletContext().getRealPath("/WEB-INF/" + request.getAttribute("myFile").toString())); 
    
  2. Utilisez ServletContext#getResource() à la place. Il renvoie un URL. Appelez le getPath() à ce sujet.

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

Way # 1 est préférable.

+0

+1 pour cette solution. Mais comme je l'ai dit, je ne comprends vraiment pas pourquoi la question est posée alors que la solution est déjà dans l'extrait que le PO a donné. –

+0

@Colin: Certaines personnes ne copient que sans réellement comprendre ce que fait chaque ligne de code. – BalusC

+0

Merci pour votre aide. – user462033

Questions connexes