Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use Spring to inject text file directly to String

Tags:

So I have this

@Value("classpath:choice-test.html") private Resource sampleHtml; private String sampleHtmlData;  @Before public void readFile() throws IOException {     sampleHtmlData = IOUtils.toString(sampleHtml.getInputStream()); } 

What I'd like to know is if it's possible to not have the readFile() method and have sampleHtmlData be injected with the contents of the file. If not I'll just have to live with this but it would be a nice shortcut.

like image 447
rozner Avatar asked Dec 06 '12 08:12

rozner


2 Answers

Technically you can do this with XML and an awkward combination of factory beans and methods. But why bother when you can use Java configuration?

@Configuration public class Spring {      @Value("classpath:choice-test.html")     private Resource sampleHtml;      @Bean     public String sampleHtmlData() {         try(InputStream is = sampleHtml.getInputStream()) {             return IOUtils.toString(is, StandardCharsets.UTF_8);         }     } } 

Notice that I also close the stream returned from sampleHtml.getInputStream() by using try-with-resources idiom. Otherwise you'll get memory leak.

like image 178
Tomasz Nurkiewicz Avatar answered Oct 26 '22 15:10

Tomasz Nurkiewicz


There is no built-in functionality for this to my knowledge but you can do it yourself e.g. like this:

<bean id="fileContentHolder">   <property name="content">     <bean class="CustomFileReader" factory-method="readContent">       <property name="filePath" value="path/to/my_file"/>     </bean>    </property> </bean> 

Where readContent() returns a String which is read from the file on path/to/my_file.

like image 25
abalogh Avatar answered Oct 26 '22 15:10

abalogh