Я хочу развернуть флягу, которая включает некоторый файл в classpath - PullRequest
1 голос
/ 11 октября 2019

Когда я выполнил jar с помощью этой команды java -jar myapp.jar, я встретил FileNotFoundException.

Мой проект - базовое Java-приложение Gradle. Я положил файл в ROOT/src/main/resources/testfile/test1.txt. И я попытался запустить код в IDE, чтобы проверить, существует ли файл, используя classpath.

File file = ResourceUtils.getFile("classpath:testfile/test1.txt");
System.out.println(file.exists());

Это правда, но когда я выполнил файл компоновки, который является результатом команды 'gradle build', я встретилFileNotFoundException. Когда я разархивирую банку, я вижу файл (\BOOT-INF\classes\testfile\test1.txt).

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

Ответы [ 2 ]

2 голосов
/ 11 октября 2019

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

    InputStream in = getClass().getResourceAsStream("/testfile/test1.txt");
    BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );
    String line = null;
    while( (line = reader.readLine() ) != null )
      System.out.println("Line: " + line);

, который работал для меня

2 голосов
/ 11 октября 2019

Вы не можете прочитать ресурсы внутри jar как java.io.File, как сказано в ссылке, которую @Shailesh поделился

InputStream is = this.getClass().getClassLoader().getResourceAsStream("classpath:testfile/test1.txt")) 

Считать файл как поток ввода и затем преобразовать его в String. а затем преобразовать его в класс, если это необходимо.

...