Почему путь к файлу не берется, когда я запускаю упакованный jar? - PullRequest
0 голосов
/ 15 октября 2018

Я написал строку для получения файла json в папке ресурсов при весенней загрузке.Когда я запускаю Eclipse IDE, путь правильный, но при сборке и запуске в качестве файла JAR путь неверный.

private static Map<String, Map<String, String>> configs;
configs = mapper.readValue(
                    new File(System.getProperty("user.dir") + File.separator + "src" + File.separator + "main"
                            + File.separator + "resources" + File.separator + "test" + File.separator + "text.json"),
                    new TypeReference<Map<String, Map<String, String>>>() {
                    });

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

посмотрите на документацию Spring Ресурс

также, когда вы запускаете свое приложение из IDE, ваше приложение не архивируется в jar и, следовательно, вы можете получить доступ к файлампросто через путь , но когда вы запускаете свое приложение из архива jar java -jar my.jar, вы должны искать свой файл в classpath, но вы также можете найти файлы вне вашего запущенного архива jar

помните, что файлы из каталога test не попадают в архив jar, эти файлы и классы в каталоге test будут доступны только во время выполнения тестов до создания архива jar

из документации Spring Boot

"classpath: com / myapp / config.xml" => Загружен из файла classpath

": /data/config.xml"=> Загруженный как URL, из файловой системы

также вы можете использовать ClassPathResource без префикса classpath: и file:

, например, выесть двафайлы:

+-src
  |  +-main
  |  |  +-java
  |  |  |  +-com
  |  |  |  |  +-example
  |  |  |  |  |  +-app
  |  |  |  |  |  |  +-MyApp.java 
  |  |  +-resources
  |  |  |  +-foo.json
  |  |  |  +-my-folder
  |  |  |  |  +-bar.json

с ClassPathResource вы найдете файлы при запуске из IDE и из архива jar

@SpringBootApplication
public class MyApp {

    public static void main(String[] args) {
        SpringApplication.run(MyApp, args);

        ClassPathResource fooClassPathResource = new ClassPathResource("foo.json");
        System.out.println(fooClassPathResource.exists());

        ClassPathResource barClassPathResource = new ClassPathResource("my-folder/bar.json");
        System.out.println(barClassPathResource.exists());
    }

}

консольный вывод:

true   
true
0 голосов
/ 15 октября 2018

Вместо использования

new File(System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "test" + File.separator + "text.json")

попробуйте использовать это, предоставляемое пружинным сердечником.

new ClassPathResource("test/text.json").getFile()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...