В какой папке находится FileInputStream? - PullRequest
10 голосов
/ 02 мая 2011

Я использую строку

FileInputStream stream = new FileInputStream("myfile.properties");

, чтобы открыть файл свойств без указания пути.

При запуске его в Apache Tomcat файл не может быть найден.Я поместил файл в корневую папку приложения.

В какой папке находится Java?

Я не могу изменить путь, потому что код не у меня.

Ответы [ 4 ]

18 голосов
/ 02 мая 2011

Это будет выглядеть в папке, которая является результатом

System.getProperty("user.dir")

, и это может быть где угодно.Это зависит от текущего рабочего каталога при запуске сервера Tomcat.

Попробуйте загрузить небольшой сервлет, который печатает эту информацию при загрузке, если вы не можете выяснить это из стандартных журналов или процедуры запуска Tomcat.

6 голосов
/ 02 мая 2011

Будет выглядеть в рабочем каталоге процесса JVM, а не в корневом каталоге WAR.Где находится этот рабочий каталог, зависит от того, как был запущен процесс Tomcat.

Поэтому вы не должны этого делать.Вы должны получать ссылки на ресурсы внутри WAR, запрашивая объект ServletContext (который имеет различные методы для поиска потоков ресурсов), например, из сервлета:

InputStream stream = getServletContext().getResourceAsStream("myfile.properties");

Кроме того, плохая практика - ссылаться на ресурсы внутри WAR как на реальные файлы.Это будет работать только в том случае, если WAR-файл разбит на структуру каталогов, и не будет работать, если содержащий сервлет решил запустить WAR-файл как нерасширенный файл .WAR.Придерживаясь методов getResource...(), вы сохраняете вещи нейтральными и переносимыми.

Однако если, как вы говорите, вы не можете изменить код, то это проблема, потому что код сломан и плохо написан.Вам необходимо выяснить, как запустить Tomcat, чтобы рабочий каталог находился в «правильном» месте.Это может повлечь за собой взлом скриптов запуска.

0 голосов
/ 02 мая 2011

Если я правильно помню: Tomcat ищет путь к классам для ВСЕХ ресурсов ... поэтому «myfile.properties» (без пути) будет находиться в любом «верхнем» каталоге в пути к классам.Вершина по умолчанию (если вы не указали путь к классу) - это WEB-INF / classes;В действительности, я думаю, что Tomcat всегда (логически) добавляет WEB-INF / классы в путь к классам, даже если вы этого не хотите ... не играл с Tomcat годами.

0 голосов
/ 02 мая 2011

Обычно он работает по умолчанию в домашнем каталоге.

Чтобы прочитать свойства, вы должны использовать Class.getResourceAsStream (String)

Кстати, более подходящее место будет METAINF dir

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...