Question

J'écris un programme en Java où je l'ai lu dans les données à partir d'un fichier XML et l'analyse syntaxique. Le fichier est importé dans un dossier nommé « Ressources » dans le répertoire src de mon projet. J'utilise Eclipse. Quand je lance le programme, je reçois l'erreur suivante:

java.io.FileNotFoundException: /Users/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
...

Le code correspondant est ici:

private void parseXML() {
    //Get a factory
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    try {
        //Use factory to get a new DocumentBuilder
        DocumentBuilder db = dbf.newDocumentBuilder();

        //Parse the XML file, get DOM representation
        dom = db.parse("resources/majors_xml_db.xml");
    } catch(ParserConfigurationException pce) {
        pce.printStackTrace();
    } catch(SAXException se) {
        se.printStackTrace();
    } catch(IOException ioe) {
        ioe.printStackTrace();
    }
}

Je ne comprends pas pourquoi je reçois le FileNotFoundException lorsque le fichier est là. Merci pour l'aide.

Était-ce utile?

La solution

DocumentBuilder.parse(String) , l'argument est interprété comme un URI, et dans ce cas, il va être une URI relative (la chaîne que vous donnez est pas un « URI complet »). Ce qu'il est relatif est un peu ambigu à ce point, sans plus d'informations sur votre configuration. Le temps d'exécution sera interprétons comme par rapport à quelque chose , mais on ne sait pas ici ce que quelque chose est.

Vous obtiendrez des résultats plus fiables en utilisant l'une des autres méthodes de parse, comme parse(File) ou parse(InputStream) . Dans chaque cas, il n'y a pas d'ambiguïté quant à ce que vous demandez à analyser.

Si vous décidez de construire un objet File premier (pour passer à parse plus tard), alors vous avez un problème plus facile à gérer de faire en sorte que ce fichier existe (en utilisant File.exists() et ainsi de suite). Si vous ne pouvez pas obtenir loin, votre problème n'est pas DocumentBuilder ou les DOM, il est avec des chemins de fichiers de base. Rappelez-vous que si vous utilisez des chemins de fichiers relatifs (par exemple new File("resources/majors_xml_db.xml")), alors il sera résolu par rapport au répertoire de travail du processus. Si cela fonctionne ou non dépend de la façon dont vous lancez votre programme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top