|
|
|
Не дружу с путями
|
|||
|---|---|---|---|
|
#18+
Всем привет! Никак не могу подружиться с путями к ресурсам, пропертям и т.п. Сижу в IntellijIdea. Пример. Есть проект с такой структурой: авторProperties ->src ____->com _________->prop ______________->myprop.prop ______________->Prop.java Prop.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Корректно читаю файл "src/com/prop/myprop.prop". И есть чужой проект с более глубокой структурой. При этом, вышуеказанный код при подставлении путей выдает (есть SRC и нет SRC): 1) "src/com/hello/world/and/people/and/other/settings.prop" - получаю " java.io.FileNotFoundException " 2) "com/hello/world/and/people/and/other/settings.prop" - все отлично. Аналогичным образом работает и через class.getClassLoader().getResourceAsStream(settings_path) Объясните пожалуйста в чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2017, 19:13 |
|
||
|
Не дружу с путями
|
|||
|---|---|---|---|
|
#18+
"src/com/prop/myprop.prop" - это относительный путь. Относительно пути откуда стартовала jvm или запустили выполнение программы. Если все файлы в C:\Users\antoniy\Documents\IntelljProjecs\Myproject то ссылка на абсолюбный путь получается C:\Users\antoniy\Documents\IntelljProjecs\Myproject/src/com/prop/myprop.prop Если файл там то нормально отработает в IDE Но если скомпилить и сделать Jar файл и перенести его например в c:\Temp и запустить оттуда то "src/com/prop/myprop.prop" это развернентся в абсолютный путь c:\Temp/src/com/prop/myprop.prop где его нет, поэтому будет ошибка Опять таки смотря какой проект, если это импорт просто исходников то скорее всего IDE запускает java из корневой директории проекта. Если это мавен проект то собрает все в target директории и стартует отуда (если неошибаюсь) Можно в Intellj Настроить директорию из которой стартовать выполнение программы в EditConfigurations С class.getClassLoader().getResourceAsStream(settings_path) аналогично только Относительный путь будет от пути а классу от которого берется getResourceAsStream() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2017, 20:18 |
|
||
|
Не дружу с путями
|
|||
|---|---|---|---|
|
#18+
Imperous prop.load(new FileReader("src/com/prop/myprop.prop")); А как это предполагается работать? Реальная-то программа будет в виде jar. Файлик myprop.prop останется внутри jar? Тогда надо писать примерно так (возможно надо URI в файл/поток преобразовать) prop.load(getClass().getResource("/com/prop/myprop.prop")); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 08:09 |
|
||
|
Не дружу с путями
|
|||
|---|---|---|---|
|
#18+
Imperous, Всё что в Java API использует слово File - это работа с файловой системой. Ресурсы прокта как и исходный код не всегда являются файлами файловой системы. Они загружаются через ClassLoader из файлов, архивов, удаленных серверов а иногда даже из баз данных. Поэтому для загрузки ресурсов исходного кода нужно использовать java.lang.Class/ClassLoader ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 09:31 |
|
||
|
Не дружу с путями
|
|||
|---|---|---|---|
|
#18+
Это вроде все понятно, но вопрос был именно про Идею и про запуск проекта, непонятно почему в одном случае работает так, а в другом иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 17:26 |
|
||
|
Не дружу с путями
|
|||
|---|---|---|---|
|
#18+
ImperousЭто вроде все понятно, но вопрос был именно про Идею и про запуск проекта, непонятно почему в одном случае работает так, а в другом иначе. Run/Debug Configuration -> Working Directory -> System.getProperty("user.dir") -> user directory ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2017, 18:21 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39443054&tid=2122949]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
71ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 214ms |
| total: | 402ms |

| 0 / 0 |
