2010-10-08 5 views
0


Dans une exécution d'applications Web dans un tomcat local, je suis en train de charger un dossier /folder qui est en tomcat/webapps/myproject/WEB-INF/folder Pour ce faire:ressources Problème de chargement de classpath

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder"); 

qui retourne null. Ce morceau de code est censé charger des ressources de classpath, ce qui est si je ne me trompe pas dans le chemin où se trouve mon dossier.
Quoi qu'il en soit, j'ai déplacé mon dossier vers différents chemins, tels que tomcat/webapps/myproject/WEB-INF/classes/folder ou tomcat/webapps/myproject/WEB-INF/lib/folder avec le même résultat.
Ai-je raté quelque chose? Merci d'avance.

En ce qui concerne toutes vos réponses (merci), je modifie ma question avec tout ce que j'ai essayé, avec le même résultat nul.
A)

String realSource = getServletContext().getRealPath("/folder"); 

B)

InputStream realPath = getClass().getClassLoader().getResourceAsStream("/folder/fileInFolder"); 

C)

ServletContext servletContext = (ServletContext)context.getExternalContext().getContext(); 
String realSource = servletContext.getRealPath("/folder"); 

je dois dire que mon chemin folder est tomcat/webapps/myproject/WEB-INF/classes/folder

Répondre

3

Le problème est que/WEB- INF n'est pas dans la classe CHEMIN d'un fichier WAR.

/WEB-INF/classes est dans le CLASSPATH; ainsi sont tous les fichiers JAR dans/WEB-INF/lib.

Si vous placez le fichier dont vous avez besoin dans/WEB-INF/classes, le chargeur de classes WAR devrait être capable de le trouver.

Vous ne pouvez pas lire un répertoire de cette façon. Ce doit être un fichier.

MISE À JOUR:

Quoi qu'il en soit, je me suis déplacé mon dossier à différents chemins , tels que tomcat/webapps/myproject/WEB-INF/classes/dossier ou tomcat/webapps/myproject/WEB- INF/lib/dossier avec le même résultat. Ai-je manqué quelque chose?

Oui, vous avez manqué deux choses:

  1. Votre dossier doit aller dans un endroit - sous/WEB-INF/classes
  2. Vous ne pouvez pas accéder au dossier à l'aide getResourceAsStream() et lire tout le contenu. Cela ne fonctionne pas comme ça. Vous ne pouvez lire qu'un seul fichier de cette façon.
+0

yep Je n'ai pas vu celui-ci ... – fasseg

+0

Et comment pourrais-je lire le répertoire ?? Merci –

+0

Vous ne pouvez pas, et vous ne devriez pas. – duffymo

0

Retirez la barre oblique et essayer à savoir

InputStream realPath = getClass().getClassLoader().getResourceAsStream("folder"); 
+0

J'ai aussi essayé, avec le même résultat. Merci –

1

Si vous voulez que le chemin complet du dossier dans votre webapp afin que vous puissiez utiliser les opérations de fichiers sur elle, voici une façon de le faire.

Note: myfolder est parallèle au WEB-INF dans mon webapp

String relativeWebPath = "/myfolder"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 

maintenant imprimer absoluteDiskPath me donne

D:\apache-tomcat-6.0.20\webapps\mywebapp\myfolder 

Essayez liste des fichiers dans ce dossier par

File dir = new File(absoluteDiskPath); 

String[] children = dir.list(); 
if (children != null) 
{ 

    for (int i=0; i<children.length; i++) { 
    // Get filename of file or directory 

    String filename = children[i]; 
    System.out.println("filename no " + i + filename); 
    } 
} 
+0

Merci, j'avais déjà essayé avant, mais j'ai eu des problèmes pour initer le Servlet, c'est pourquoi j'ai décidé de changer de chemin. Le problème que j'avais était dans cette distribution Servlet servlet = (Servlet) context.getExternalContext(); –

+0

Pouvez-vous créer Chaîne absoluteDiskPath = getServletContext(). GetRealPath (relativeWebPath); sans problèmes ?? –

+1

@mujer esponja: oui, si votre code est un servlet approprié (ie extension de HTTPServlet) alors vous pouvez directement utiliser getServletConfig() et getServletContext() dans la méthode goGet() http://download.oracle.com/docs/cd /E17802_01/webservices/webservices/docs/1.6/api/javax/servlet/http/HttpServlet.html – JoseK