Лучшие практики для работы с путями к файлам в Java - PullRequest
1 голос
/ 14 октября 2011

Я пытаюсь загрузить файл свойств для создания конфигурации. а именно foo.properties.

Какое лучшее место для хранения этого файла конфигурации. В пакете, где я буду использовать инициализировать с использованием класса? на корневом уровне src?

Кроме того, при доступе к файлам я использую расположение файла в файловой системе: то есть: c: \ configs \ foo.properties.

Есть ли лучшая практика для этого? например, использование пути относительно проекта, а не расположения файловой системы? Если да, как я могу ссылаться на расположение файла свойств в дереве проекта. такие как:

src/
   /com.foo.bar
   /com.foo.car
   /com.foo.zar
   foo.properties

Допустим, я хочу прочитать файл свойств в память, как мне получить доступ к этому foo.properties без использования местоположения ОС / или местоположения в файловой системе.

Ответы [ 3 ]

2 голосов
/ 14 октября 2011

Я всегда видел, как это делается, чтобы поместить файл свойств в src / main / resources и затем обратиться к нему с помощью getResourceAsStream () .

Это хороший вопрос для рассмотрения: Загрузка ресурса, содержащегося в банке

0 голосов
/ 14 октября 2011

Если вы хотите сохранить что-то близкое к вашей текущей структуре, вы можете просто добавить папку resources, например:

src/
   /com.foo.bar
   /com.foo.car
   /com.foo.zar
resources
   /foo.properties

Но я настоятельно рекомендую следовать структурам каталогов Maven, они действительно дают вам большую гибкость:

src/
    /main
        /java
            /com.foo.bar
            /com.foo.car
            /com.foo.zar
        /resources
            /foo.properties

Независимо от того, с каким макетом вы работаете, я бы порекомендовал поместить ваши ресурсы в структуру папок, совпадающую с одним из ваших пакетов Java, чтобы вы могли легко загружать их как ресурсы, избегая головоломки «абсолютный или относительный путь к файлу». Примерно так:

src/
    /resources/
       /com/foo/bar/foo.properties

И, учитывая класс com.foo.bar.MyClass, вы можете сделать что-то вроде этого:

InputStream is = MyClass. getResourceAsStream("com/foo/bar/foo.properties");
0 голосов
/ 14 октября 2011

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

Что касается способа доступа к файлу, использование абсолютных путей - это действительно плохая идея: представьте, что вы хотите распространять свое приложение как Jar, развернуть его навеб-сервер, или просто полностью переместите его в другое место!

Посмотрите:

http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#getResourceAsStream-java.lang.String-

Если у вас есть файл свойств в вашем пути к классам (какнапример, часть вашего источника), затем вы можете загрузить его таким же образом, независимо от того, где вы находитесь (даже внутри банки).

...