powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Не дружу с путями
6 сообщений из 6, страница 1 из 1
Не дружу с путями
    #39442946
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Никак не могу подружиться с путями к ресурсам, пропертям и т.п.

Сижу в 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.
package com.prop;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;

public class Prop {
    public static void main(String[] args) throws IOException {
        Properties prop = new Properties();
        prop.load(new FileReader("src/com/prop/myprop.prop"));
        for(String key : prop.stringPropertyNames())
            System.out.println(key +":" + prop.get(key));
    }
}


Корректно читаю файл "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)

Объясните пожалуйста в чем проблема?
...
Рейтинг: 0 / 0
Не дружу с путями
    #39442969
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"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()
...
Рейтинг: 0 / 0
Не дружу с путями
    #39443026
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous prop.load(new FileReader("src/com/prop/myprop.prop"));


А как это предполагается работать?
Реальная-то программа будет в виде jar. Файлик myprop.prop останется внутри jar? Тогда надо писать примерно так (возможно надо URI в файл/поток преобразовать)
prop.load(getClass().getResource("/com/prop/myprop.prop"));
...
Рейтинг: 0 / 0
Не дружу с путями
    #39443054
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Imperous,

Всё что в Java API использует слово File - это работа с файловой системой.
Ресурсы прокта как и исходный код не всегда являются файлами файловой системы. Они загружаются через ClassLoader из файлов, архивов, удаленных серверов а иногда даже из баз данных.
Поэтому для загрузки ресурсов исходного кода нужно использовать java.lang.Class/ClassLoader
...
Рейтинг: 0 / 0
Не дружу с путями
    #39444216
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вроде все понятно, но вопрос был именно про Идею и про запуск проекта, непонятно почему в одном случае работает так, а в другом иначе.
...
Рейтинг: 0 / 0
Не дружу с путями
    #39444249
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ImperousЭто вроде все понятно, но вопрос был именно про Идею и про запуск проекта, непонятно почему в одном случае работает так, а в другом иначе.
Run/Debug Configuration -> Working Directory -> System.getProperty("user.dir") -> user directory
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Не дружу с путями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]