Question

Je dois obtenir le chemin réel pour le fichier dans mon répertoire WebContent, de sorte que le cadre que je l'utilise peut accéder à ce fichier. Il ne prend fichier chaîne comme attribut, donc je dois obtenir le chemin réel à ce fichier dans le répertoire WebContent.

J'utilise Spring Framework, donc la solution devrait être possible de faire au printemps.

Était-ce utile?

La solution

Si vous avez besoin cela dans un servlet puis utiliser getServletContext().getRealPath("/filepathInContext")!

Autres conseils

getServletContext () getRealPath ( "") -. De cette façon, ne fonctionnera pas si le contenu est mis à la disposition d'une archive .war. getServletContext () sera nulle.

Dans ce cas, nous pouvons utiliser une autre façon d'obtenir le chemin réel. Ceci est par exemple d'obtenir un chemin vers un fichier de propriétés C: / Program Files / Tomcat 6 / webapps / myapp / WEB-INF / classes / somefile.properties:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/"
URL r = this.getClass().getResource("/");

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
String decoded = URLDecoder.decode(r.getFile(), "UTF-8");

if (decoded.startsWith("/")) {
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
    decoded = decoded.replaceFirst("/", "");
}
File f = new File(decoded, "somefile.properties");

vous devez dire java pour changer le chemin de votre PC dans votre projet java afin si vous utilisez l'utilisation du printemps:

@Autowired
ServletContext c;

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

mais si vous utilisez servlets utiliser simplement

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images");  

le chemin sera /webapp/images/:)

Dans des situations comme celles-ci, je tends à extraire le contenu que j'ai besoin en tant que ressource (MyClass.getClass (). GetResourceAsStream ()), écrire dans un fichier à un emplacement temporaire et utiliser ce fichier pour l'autre appel.

De cette façon, je n'ai pas à se soucier de contenu qui est contenu seulement dans des bocaux ou est situé quelque part en fonction du conteneur Web Je suis actuellement à l'aide.

Inclure la demande en tant que paramètre. Le printemps passera alors l'objet de la demande quand il appelle la méthode cartographié

@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...

Vous pouvez utiliser l'interface de ressources printemps (et en particulier le ServletContextResource): http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html

Cette approche utilise le chargeur de ressources pour obtenir le chemin absolu vers un fichier dans votre application, puis monte quelques dossiers dans le dossier racine de l'application. Aucun contexte de servlet nécessaire! Cela devrait fonctionner si vous avez un « web.xml » dans votre dossier WEB-INF. Notez que vous pouvez envisager d'utiliser ce seul pour le développement, car ce type de configuration est généralement mieux stocké à l'extérieur de l'application.

public String getAppPath()
{
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml");
    String filePath = r.getFile();
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent();

    if (! filePath.contains("WEB-INF"))
    {
        // Assume we need to add the "WebContent" folder if using Jetty.
        result = FilenameUtils.concat(result, "WebContent");
    }

    return result;
}

essayez d'utiliser quand vous voulez utiliser arff.txt dans votre développement et le niveau de production trop

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top