У меня есть проект maven, и в рамках моего требования мне нужно прочитать файл из класса Test, который находится в одном из каталогов внутри тестовых папок.
Моя иерархия проектов такая ..
src
--test
---java
--org
--sample
--- MyTestClass.java
---jmeter
---load_data.csv
В MyTestClass.java мне нужно прочитать load_data.csv. Мои испытания с File и Path пока не дали результатов
file.exists () всегда дает мне ложь ... Как мне найти файл и прочитать его
С Уважением
Добавьте его в путь к классам, указав его как каталог ресурсов в вашем инструменте сборки. Затем просто загрузите его, как любой другой ресурс пути к классам.




Добавьте свой 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") или воспользоваться одним из методов разрешить? Используя любой из этих способов, вам не нужно беспокоиться о разделителе. Также вы можете указать, что вы предполагаете, что корень проекта является текущим рабочим каталогом во время выполнения.
Вопрос в 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
Попробуйте добавить следующий код в ваш
MyTestClass, чтобы вы могли видеть текущий рабочий каталог при запуске вашего теста:System.out.println("working dir: "+Paths.get("").toAbsolutePath());Затем вы сможете увидеть, как построить свой полный путь.