Как я могу получить реальный путь для файла в моей папке WebContent?

StackOverflow https://stackoverflow.com/questions/2786426

Вопрос

Мне нужно получить реальный путь для файла в моем каталоге WebContent, так что эта структура, которую я использую, может получить доступ к этому файлу. Это только строки файла в качестве атрибута, поэтому мне нужно получить реальный путь к этому файлу в каталоге WebContent.

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

Это было полезно?

Решение

Если вам нужно это в сервете, то используйте getServletContext().getRealPath("/filepathInContext")!

Другие советы

getservletcontext (). GetrealPath ("") - Таким образом не будет работать, если содержимое доступен из архива .war. getsevletcontext () будет нулевым.

В этом случае мы можем использовать другой способ получить реальный путь. Это пример получения пути к файлу свойств C: / Program / Tomcat 6 / WebApps / MyApp / Web-inf / Classes / uverefile.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");

Вы должны сказать Java изменить путь от вашего ПК в свой проект Java, поэтому, если вы используете пружинное использование:

@Autowired
ServletContext c;

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

Но если вы используете сервлеты, просто используйте

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

так что путь будет /webapp/images/ :)

В таких ситуациях, как эти, я склонен извлечь контент, который мне нужен в качестве ресурса (MyClass.getClass (). GetResourceasStream ()), напишите его как файл во временное местоположение и используйте этот файл для другого вызова.

Таким образом, мне не нужно беспокоиться с контентом, который содержится только в банках, или находится где-то в зависимости от веб-контейнера, который я использую в настоящее время.

Включите запрос в качестве параметра. Затем пружина пропустит объект запроса, когда он вызывает сопоставленный метод

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

Вы можете использовать интерфейс Spring Resource (и особенно сервлетконтэкстерсурс): http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/resource.html.

Этот подход использует погрузчик ресурсов, чтобы получить абсолютный путь к файлу в вашем приложении, а затем поднимается вверх по нескольким папкам в корневую папку приложения. Контекст сервлета не требуется! Это должно работать, если у вас есть «Web.xml» в вашей папке веб-инф. Обратите внимание, что вы можете рассмотреть возможность использования этого исключительно для разработки, поскольку этот тип конфигурации обычно лучше всего сохраняется из-за приложения.

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

Попробуйте использовать это, когда вы хотите использовать Arff.txt в вашем уровне разработки и производства тоже

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top