Comment utiliser le classpath pour spécifier l'emplacement d'un fichier qui se trouve dans mon projet Spring?
C'est ce que j'ai actuellement:
FileReader fr = new FileReader("C:\\Users\\Corey\\Desktop\\storedProcedures.sql");
Ceci est codé en dur sur mon bureau. Ce que j'aimerais, c'est pouvoir utiliser le chemin du fichier qui se trouve dans mon projet.
FileReader fr = new FileReader("/src/main/resources/storedProcedures.sql");
Aucune suggestion?
Parlons-nous de la norme Java.io.FileReader
? Ça ne marchera pas, mais ce n'est pas difficile sans ça.
Le contenu du répertoire /src/main/resources
maven est placé à la racine de votre CLASSPATH, vous pouvez donc le récupérer simplement en utilisant:
InputStream is = getClass().getResourceAsStream("/storedProcedures.sql");
Si le résultat n'est pas null
(ressource non trouvée), n'hésitez pas à l'envelopper dans un lecteur:
Reader reader = new InputStreamReader(is);
D'après une réponse de @NimChimpsky dans question similaire :
Resource resource = new ClassPathResource("storedProcedures.sql");
InputStream resourceInputStream = resource.getInputStream();
Utilisation de ClassPathResource et interface Resource . Et assurez-vous que vous ajoutez le répertoire de ressources correctement (en ajoutant /src/main/resources/
dans le chemin de classe).
Notez que Resource possède une méthode pour obtenir un Java.io.File
. Vous pouvez donc également utiliser:
Resource resource = new ClassPathResource("storedProcedures.sql");
FileReader fr = new FileReader(resource.getFile());
Spring a org.springframework.core.io.Resource qui est conçu pour de telles situations. Depuis context.xml, vous pouvez passer classpath au bean
<bean class="test.Test1">
<property name="path" value="classpath:/test/test1.xml" />
</bean>
et vous l'obtenez dans votre haricot en tant que ressource:
public void setPath(Resource path) throws IOException {
File file = path.getFile();
System.out.println(file);
}
sortie
D:\workspace1\spring\target\test-classes\test\test1.xml
Maintenant, vous pouvez l'utiliser dans le nouveau FileReader (fichier)
on dirait que vous avez projet maven et donc les ressources sont en classpath par
aller chercher
getClass().getResource("classpath:storedProcedures.sql")