web-dev-qa-db-fra.com

Comment obtenir des fichiers du dossier de ressources. Cadre de printemps

J'essaie de décompresser mon fichier XML:

public Object convertFromXMLToObject(String xmlfile) throws IOException {
    FileInputStream is = null;
    File file = new File(String.valueOf(this.getClass().getResource("xmlToParse/companies.xml")));
    try {
        is = new FileInputStream(file);
        return getUnmarshaller().unmarshal(new StreamSource(is));
    } finally {
        if (is != null) {
            is.close();
        }
    }
}

Mais je reçois ces erreurs: Java.io.FileNotFoundException: null (Aucun fichier ou répertoire de ce type)

Voici ma structure:

enter image description here

Pourquoi je ne peux pas obtenir de fichiers du dossier de ressources? Merci.

Mise à jour.

Après refactoring,

URL url = this.getClass (). GetResource ("/ xmlToParse/companies.xml"); Fichier Fichier = Nouveau Fichier (url.getPath ());

Je peux voir une erreur plus clairement:

Java.io.FileNotFoundException: /content/ROOT.war/WEB-INF/classes/xmlToParse/companies.xml (Aucun fichier ou répertoire de ce type)

Il essaie de trouver WEB-INF/classes/j’ai ajouté un dossier là-bas, mais je reçois toujours cette erreur :(

enter image description here

19
Tom Wally

J'ai eu le même problème en essayant de charger des fichiers XML dans mes classes de test. Si vous utilisez Spring, comme vous pouvez le suggérer à partir de votre question, le moyen le plus simple consiste à utiliser org.springframework.core.io.Resource - celui Raphael Rot h déjà mentionné. .

Le code est vraiment simple. Déclarez simplement un champ du type org.springframework.core.io.Resource et annotez-le avec org.springframework.beans.factory.annotation.Value - comme ça:

@Value(value = "classpath:xmlToParse/companies.xml")
private Resource companiesXml;

Pour obtenir le InputStream nécessaire, appelez simplement

companiesXml.getInputStream()

et ça devrait aller :)

Mais pardonnez-moi, je dois poser une question: pourquoi voulez-vous implémenter un analyseur XML à l'aide de Spring? Il y a beaucoup de construction dans :) par exemple. pour les services Web, il existe de très bonnes solutions qui regroupent vos XML dans Java Objects and back ...

45
jonashackt
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("fileName").getFile());
13
bearwithbeard

vous êtes supposé donner un chemin absolu (ajoutez donc un chargement ´/´, où resource-folder est le dossier racine):

public Object convertFromXMLToObject(String xmlfile) throws IOException {
    FileInputStream is = null;
    File file = new File(String.valueOf(this.getClass().getResource("/xmlToParse/companies.xml")));
    try {
        is = new FileInputStream(file);
        return getUnmarshaller().unmarshal(new StreamSource(is));
    } finally {
        if (is != null) {
            is.close();
        }
    }
}
0
Raphael Roth