Подтвердить что ты не робот

Java Spring - Как использовать classpath для указания местоположения файла?

Как я могу использовать путь к классам для указания местоположения файла, который находится в моем проекте Spring?

Это то, что у меня есть:

FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");

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

FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");

Любые предложения?

4b9b3361

Ответ 1

Мы говорим о стандартном java.io.FileReader? Не будет работать, но это не сложно без него.

/src/main/resources Содержимое каталога maven помещается в корень вашего CLASSPATH, поэтому вы можете просто восстановить его, используя:

InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");

Если результат не null (ресурс не найден), не забудьте его обернуть в читатель:

Reader reader = new InputStreamReader(is);

Ответ 2

Из ответа @NimChimpsky в аналогичный вопрос:

Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();

Используя ClassPathResource и интерфейс Resource. И убедитесь, что вы правильно добавляете каталог ресурсов (добавив /src/main/resources/ в путь к классам).

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

Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());

Ответ 3

Spring имеет org.springframework.core.io.Resource, который предназначен для таких ситуаций. Из context.xml вы можете передать путь к классу bean

<bean class="test.Test1">
        <property name="path" value="classpath:/test/test1.xml" />
    </bean>

и вы получите его в bean как ресурс:

public void setPath(Resource path) throws IOException {
    File file = path.getFile();
    System.out.println(file);
    }

Выход

D:\workspace1\spring\target\test-classes\test\test1.xml

Теперь вы можете использовать его в новом файле FileReader (файл)

Ответ 4

похоже, что у вас есть проект maven, и поэтому ресурсы находятся в classpath с помощью

перейти

getClass().getResource("classpath:storedProcedures.sql")