Путь к файлу - относительный путь

У меня есть проект maven, и в рамках моего требования мне нужно прочитать файл из класса Test, который находится в одном из каталогов внутри тестовых папок.

Моя иерархия проектов такая ..

src
     --test
        ---java
             --org
                 --sample
                      --- MyTestClass.java
        ---jmeter
               ---load_data.csv

В MyTestClass.java мне нужно прочитать load_data.csv. Мои испытания с File и Path пока не дали результатов

file.exists () всегда дает мне ложь ... Как мне найти файл и прочитать его

С Уважением

Попробуйте добавить следующий код в ваш MyTestClass, чтобы вы могли видеть текущий рабочий каталог при запуске вашего теста: System.out.println("working dir: "+Paths.get("").toAbsolutePath()); Затем вы сможете увидеть, как построить свой полный путь.

D.B. 01.07.2018 18:45

Добавьте его в путь к классам, указав его как каталог ресурсов в вашем инструменте сборки. Затем просто загрузите его, как любой другой ресурс пути к классам.

Boris the Spider 01.07.2018 19:00
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
180
3

Ответы 3

Добавьте свой load_data.csv в src/test/resources/ и запросите соответствующий запрос.

Предполагая, что корень вашего проекта является родительским для src, ваш путь должен быть таким:

Paths.get("src", "test", "jmeter", "load_data.csv")

Почему бы не передать в Paths.get() несколько значений? Например. Paths.get("src","test","jmeter","load_data.csv") или воспользоваться одним из методов разрешить? Используя любой из этих способов, вам не нужно беспокоиться о разделителе. Также вы можете указать, что вы предполагаете, что корень проекта является текущим рабочим каталогом во время выполнения.

D.B. 01.07.2018 18:55

Вопрос в 2 раза. Как получить доступ к файлу из Maven и, во-вторых, как получить доступ к файлу из своего класса. Я предполагаю, что ваша сборка maven не работает, потому что она не проходит тест из-за отсутствующего файла.

Быстрые и грязные способы:

Введите полный путь. В зависимости от ОС перейдите к файлу в своем терминале и введите (OSX и nix): «pwd», скопируйте и вставьте полный путь в новый файл (). Windows: echo% cd% ИЛИ ЖЕ Как построить относительный путь в Java из двух абсолютных путей (или URL-адресов)?

Лучшие способы: Вероятно, вам следует добавить этот файл в ресурсы. По соглашению вы хотите разместить свои ресурсы в этой папке. Это упрощает доступ к вашим классам, также известным как class.getResource ("somefile.txt"), и вам не нужно беспокоиться об относительном пути. Также он добавляется в вашу банку, когда вы распространяете свою программу. Файловая структура: Соглашение src-> main -> resources -> load_data.csv

В вашем случае src -> test -> resources -> load_data.csv

Теперь, как ссылаться на ресурс из maven. Сложный способ добавления ресурсов во время сборки ниже - из документации Maven https://maven.apache.org/plugins/maven-resources-plugin.

<executions>
      <execution>
        <id>copy-resources</id>
        <!-- here the phase you need -->
        <phase>validate</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${basedir}/target/extra-resources</outputDirectory>
          <resources>          
            <resource>
              <directory>src/non-packaged-resources</directory>
              <filtering>true</filtering>
            </resource>
          </resources>              
        </configuration>            
      </execution>
    </executions>

Если вы не хотите, чтобы testResources был частью основного дистрибутива, вам необходимо добавить тестовый профиль и исключить их из основной фазы / сборки. Еще немного документации https://maven.apache.org/plugins/maven-resources-plugin/testResources-mojo.html

Другие вопросы по теме