IntelliJ и Java путь по умолчанию для чтения файлов - PullRequest
0 голосов
/ 05 декабря 2018

Я немного сбит с толку, как путь поиска файлов по умолчанию задается как в IntelliJ, так и в Java в целом.Я включаю IntelliJ в качестве тега, потому что эта IDE наверняка изменяет / добавляет некоторые дополнительные пути для поиска.

Рассмотрим следующий, фиктивный код:

    File ff = new File("test.txt");
    if(ff.exists() && !ff.isDirectory()) {
        System.out.println("Exist");
        LabelReader lr = new LabelReader(ff);
    } else {
        System.out.println("Missing");
    }

В IntelliJ это будет работатьтолько, если test.txt будет помещено в самый верхний каталог проекта (т.е. вместе с src, pom.xml ect)

Первый вопрос :
, какая настройка отвечаетдля добавления / изменения этого фиктивного начального пути?

Теперь ClassLoader и getResource:

    ClassLoader cl = DayTwoMain.class.getClassLoader();
    URL pathURL = cl.getResource("test.txt");
    File ff = new File(pathURL.getPath());
    if(ff.exists() && !ff.isDirectory()) {
        System.out.println("Exist");
        LabelReader lr = new LabelReader(ff);
    } else {
        System.out.println("Missing");
    }

Будет выдано NullPointerException, поскольку URL установлено на null, но после фиктивного вызова:

    ClassLoader cl = DayTwoMain.class.getClassLoader();
    URL pathURL = cl.getResource("");

Предоставляет URL-адрес, который указывает на [ProjectRoot]/target/classes

Второй вопрос :
Почему для ClassLoader указан путькаталог после сборки?Связано ли это с реальной JVM, начиная с этого каталога после компиляции исходных текстов?Как и где это можно изменить / изменить?

Теперь с ресурсами.Я предполагаю, что файлы проектов IntelliJ / Maven, изображения, конфигурации и другие статические данные должны храниться в папке ресурсов.Таким образом, папка, помеченная как корневая папка ресурсов в IntelliJ, должна быть скопирована как есть в целевое место назначения, но для меня это не так, цель содержит только папку классов, ресурсы не были скопированы.Я должен вручную добавить раздел с ресурсами к pom.xml, как показано ниже:

    <resources>
        <resource>
            <directory>src/main/resources/*</directory>
        </resource>
    </resources>

, чтобы заставить IntelliJ скопировать его в цель.

Третий вопрос
IsnРазве это не задача, которую IntelliJ выполняет автоматически?Какие огромные IDE предназначены для автоматизации этих задач с помощью веселья и радости «укажи и щелкни»?Или я что-то не так делаю?

1 Ответ

0 голосов
/ 05 декабря 2018

new File("test.txt") попытается прочитать файл из текущего рабочего каталога.В IntelliJ каждая конфигурация прогона позволяет указывать параметр «Рабочий каталог» согласно документации : создание и редактирование конфигураций прогона / отладки

Это может зависеть от платформы, например, если у вас есть настраиваемая конфигурация прогона сИсполняемый файл java запускается в Windows через конфигурацию cmd /c java чем cmd, например, применяются записи реестра.

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

Это полностью отличается от ваших вопросов, связанных с ClassLoader и фильтрацией ресурсов Maven.IntelliJ не управляет этими вещами, в среде IDE удобно работать только с конфигурацией запуска.

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