Frage

ich brauche für Datei in meinem WebContent Verzeichnis realen Weg zu bekommen, so dass Rahmen, dass ich diese Datei zugreifen kann. Es dauert nur String-Datei als Attribut, so dass ich den wahren Pfad zu dieser Datei in WebContent Verzeichnis erhalten müssen.

Ich verwende Spring Framework, so Lösung möglich sein soll, im Frühjahr zu machen.

War es hilfreich?

Lösung

Wenn Sie diese in einem Servlet dann Verwendung getServletContext().getRealPath("/filepathInContext")!

Andere Tipps

getServletContext () getRealPath ( „“) -. Auf diese Weise wird nicht funktionieren, wenn der Inhalt aus einem .war-Archiv wird. getServletContext () wird null sein.

In diesem Fall können wir einen anderen Weg verwenden realen Weg zu bekommen. Dies ist Beispiel für einen Pfad zu einer Datei Eigenschaften C bekommen: / Programme / 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");

Sie müssen Java sagen, den Weg von Ihrem PC in Ihr Java-Projekt zu ändern, so wenn Sie Feder Verwendung verwenden:

@Autowired
ServletContext c;

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

, aber wenn Sie Servlets verwenden nur verwenden

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

so wird der Weg /webapp/images/ sein:)

In solchen Situationen neige ich dazu, den Inhalt ich als Ressource benötigen zu extrahieren (MyClass.getClass (). GetResourceAsStream ()), schreiben Sie es als eine Datei in einem temporären Speicherort und verwenden diese Datei für den anderen Anruf.

Auf diese Weise muss ich mit dem Inhalt nicht die Mühe machen, die nur in den Gläsern enthalten ist oder sich irgendwo in Abhängigkeit von der Web-Container ich zur Zeit verwendet wird.

Fügen Sie die Anfrage als Parameter. Frühling wird dann das Request-Objekt übergibt, wenn es die zugeordnete Methode aufruft

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

Sie könnten die Federressourcen Schnittstelle (und vor allem die ServletContextResource): http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html

Dieser Ansatz verwendet die Ressource-Lade den absoluten Pfad zu einer Datei in Ihrer App zu bekommen, und dann ein paar Ordner in den Stammordner der App nach oben geht. Kein Servletkontext erforderlich! Dies sollte funktionieren, wenn Sie eine „web.xml“ im WEB-INF-Ordner haben. Beachten Sie, dass Sie für die Entwicklung mit diesem allein betrachten mögen, da diese Art der Konfiguration ist in der Regel am besten von außen aus der App gespeichert.

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;
}

versuchen, dies zu verwenden, wenn Sie auch in Ihrer Entwicklung und Produktionsebene verwenden arff.txt wollen

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top