Java Spring - Как использовать classpath для указания местоположения файла?
Как я могу использовать путь к классам для указания местоположения файла, который находится в моем проекте Spring?
Это то, что у меня есть:
FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
Это жесткий диск для моего рабочего стола. Я хотел бы иметь возможность использовать путь к файлу, который находится в моем проекте.
FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");
Любые предложения?
Ответы
Ответ 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")