Java: Accès aux resources fichiers avec Spring

L'objet de ce billet est de présenter une démo illustrant l'accès optimal aux fichiers en utilisant Spring.

Java 5+ et spring 3.x sont utilisés.

Il existe plusieurs manières d'accèder aux fichiers ou de récupérer leurs contenus.

Ce billet retient une manière efficace avec peu de code.

Passons à la démo.

Notre use-case: Lire le contenu de fichiers sur disque.

I. ECRIRE LE POM DU PROJET

Voici les dépendances utiles à rajouter dans le pom:


<properties>
 <spring.framework.version>3.0.6.RELEASE</spring.framework.version>
</properties>
<dependencies>	
 <!-- miLyn StreamUtils -->
 <dependency>
   <groupId>org.milyn</groupId>
   <artifactId>milyn-commons</artifactId>
   <version>1.5.1</version>
 </dependency>
 <!--  spring  -->	
 <dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${spring.framework.version}</version>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8</version>
  <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-test</artifactId>
 <version>${spring.framework.version}</version>
 <scope>test</scope>
</dependency>
 <!-- log4j -->
 <dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.14</version>
 </dependency>
</dependencies>

II. ECRIRE LE BEAN ACCEDANT AUX RESOURCES

Notre unique classe BeanDemo déclare un attribut de type org.springframework.core.io. Resource nommée simplement resource.
Le setter de cet attribut autorise spring à l'injecter comme illustré dans xml plus loin.

import java.io.IOException;
import org.milyn.io.StreamUtils;
import org.springframework.core.io.Resource;
public class BeanDemo {
	private Resource resource;
	public String lireContenu() throws IOException {
		return StreamUtils.readStreamAsString(
                         resource.getInputStream()    ) ;
	}
	public void setResource(Resource resource) {
		this.resource = resource;
	}
}

Vous constatez que la méthode lireContenu contient une seule ligne.

Elle utilise la méthode statique readStreamAsString de org.milyn.io.StreamUtils qui attend en argument un inputStream.
La méthode getInputStream de spring fournit cet argument.

III. CONFIGURER CE BEAN

Le fichier xml de configuration de spring nommé spring-context.xml contient ces deux lignes:

<bean id="beanDemo" class="fr.moi.spring.BeanDemo">
<property name="resource" value="file:/temp/demo.txt"/>
</bean>

Notez que le fichier demo.txt doit être présent dans le dossier /temp.

IV. TEST UNITAIRE

Le code de la class test Junit est :

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={
           "classpath:/META-INF/spring/spring-context.xml"})
public class TestDemo {
	@Autowired
	BeanDemo beanDemo;
	@Test
	public void test() throws IOException {
		String contenu=beanDemo.lireContenu();
		assertTrue(contenu.contains(.......)); //TODO
	}
}

Ce code doit être complété avec l'assertion.

Une fois l'assertion adaptée en fonction du contenu du fichier /temp/demo.txt, il suffit de lancer la commande :

mvn test

C'est tout.

7 commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.