web-dev-qa-db-fra.com

Java Spring - Comment utiliser classpath pour spécifier un emplacement de fichier?

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?

31
Takkun

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);
37
Tomasz Nurkiewicz

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());
9
PhoneixS

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)

5
Evgeniy Dorofeev

on dirait que vous avez projet maven et donc les ressources sont en classpath par

aller chercher

getClass().getResource("classpath:storedProcedures.sql")
0
Jigar Joshi