programing

리소스를 로드하고 해당 리소스의 내용을 봄에 문자열로 사용하는 방법

codeshow 2023. 10. 29. 20:04
반응형

리소스를 로드하고 해당 리소스의 내용을 봄에 문자열로 사용하는 방법

Spring 리소스 컨텐츠를 로드하고 이를 사용하여 bean 속성을 설정하거나 인수 생성자로 전달하려면 어떻게 해야 합니까?

리소스에 사용 가능한 텍스트가 있습니다.

한 줄에서 test.xml을 읽어 보십시오.

String msg = StreamUtils.copyToString( new ClassPathResource("test.xml").getInputStream(), Charset.defaultCharset()  );
<bean id="contents" class="org.apache.commons.io.IOUtils" factory-method="toString">
    <constructor-arg value="classpath:path/to/resource.txt" type="java.io.InputStream" />
</bean>

이 솔루션에는 Apache Commons IO가 필요합니다.

@Parvez가 제안한 Apache Commons IO 의존성이 없는 또 다른 솔루션은

<bean id="contents" class="java.lang.String">
    <constructor-arg>
        <bean class="org.springframework.util.FileCopyUtils" factory-method="copyToByteArray">
            <constructor-arg value="classpath:path/to/resource.txt" type="java.io.InputStream" />
        </bean>     
    </constructor-arg>
</bean>

그냥 읽어보기만 하면 됩니다.

    try {
        Resource resource = new ClassPathResource(fileLocationInClasspath);
        BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()),1024);
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            stringBuilder.append(line).append('\n');
        }
        br.close();
        return stringBuilder.toString();
    } catch (Exception e) {
        LOGGER.error(e);
    }

2021년 업데이트.

스프링스를 사용하시면 됩니다.Resource텍스트 파일의 내용을 가져온 후 사용하기 위한 인터페이스StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());문자를 받기 위해서 입니다.

예는 다음과 같습니다.

    @Value("classpath:appVersionFilePath")
    private Resource resource;

    @GetMapping(value = "/hello")
    public HttpResult<String> hello() throws IOException {
        String appVersion = StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());
        // ...
    }

이것은 외부 라이브러리를 사용하지 않고 수행할 수 있는 한 가지 방법입니다.봄이 제공하는 채무 불이행..environment.properties 파일에 키 값 쌍이 포함되어 있습니다. 각 값을 ${key}로 참조합니다.

예를 들어, 데이터베이스 소품을 보관하고 있습니다.

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list value-type="org.springframework.core.io.Resource">
            <value>classpath:environment.properties</value>

        </list>
    </property>
</bean>
<bean id="mySQLdataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${JDBC.driver}" />
    <property name="url" value="${JDBC.URL}" />
    <property name="username" value="${JDBC.username}" />
    <property name="password" value="${JDBC.password}" />
</bean>

daoway 답변이 매우 도움이 되었고, Adrian 발언에 따라 daoway의 코드와 유사한 구성 스니펫을 추가합니다.

<bean id="contents" class="org.springframework.core.io.ClassPathResource">
    <constructor-arg value="path/to/resource.txt"/>
</bean>

구성요소에서

    @Autowired
    private Resource contents;

    @PostConstruct
    public void load(){
        try {
            final InputStream inputStream = contents.getInputStream();
                //use the stream 
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream ,1024);
            StringBuilder stringBuilder = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                stringBuilder.append(line).append('\n');
            }
            br.close();
     }catch (IOException e) {
            LOGGER.error(message);
     }
  }

    private String readResource(String fileName){
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Resource resource = resourceLoader.getResource("resourceSubfolder/"+fileName)
    try{
         Reader reader = new InputStreamReader(resource.getInputStream());
         return FileCopyUtils.copyToString(reader);
    } catch (IOException e){
         e.printStackTrace();
    }
    return null;
    }

언급URL : https://stackoverflow.com/questions/14022839/how-do-i-load-a-resource-and-use-its-contents-as-a-string-in-spring

반응형