Как я могу получить реальный путь к файлу в моей папке WebContent? - PullRequest
10 голосов
/ 07 мая 2010

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

Я использую Spring Framework, поэтому решение должно быть возможным в Spring.

Ответы [ 8 ]

13 голосов
/ 07 мая 2010

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

12 голосов
/ 06 ноября 2012

getServletContext (). GetRealPath ("") - этот способ не будет работать, если контент доступен из архива .war. getServletContext () будет нулевым.

В этом случае мы можем использовать другой способ получить реальный путь. Это пример получения пути к файлу свойств 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");
1 голос
/ 27 января 2018

вы должны указать java изменить путь с вашего компьютера в ваш проект java, поэтому, если вы используете spring, используйте:

@Autowired
ServletContext c;

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

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

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

поэтому путь будет /webapp/images/:)

0 голосов
/ 29 декабря 2017

попробуйте использовать это, если вы хотите использовать arff.txt на уровне разработки и производства

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
0 голосов
/ 16 апреля 2012

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

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;
}
0 голосов
/ 07 мая 2010

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

0 голосов
/ 07 мая 2010

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

@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...
0 голосов
/ 07 мая 2010

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

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

...