2010-04-04 5 views
5

J'écris un programme en Java où je lis les données d'un fichier XML et je l'analyse. Le fichier est importé dans un dossier nommé "Resources" dans le répertoire src de mon projet. J'utilise Eclipse. Quand je lance le programme, je reçois l'erreur suivante:FileNotFoundException lors de la lecture du fichier .xml pour analyser

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.

+1

Cela ne peut pas être un problème, mais je pensais que dans votre description, vous avez appelé le dossier "Ressources" et dans le code, il est "ressources". Sur un système d'exploitation avec des chemins sensibles à la casse, cela peut provoquer un problème. – Ash

+0

La capitalisation était une faute de frappe. c'est "ressources" dans les deux endroits. – ericso

+0

Avez-vous essayé d'utiliser cette instruction? System.getProperty ("user.dir") –

Répondre

6

Avec DocumentBuilder.parse(String), l'argument est interprété comme un URI, et dans ce cas, il s'agira d'un URI relatif (la chaîne que vous lui donnez n'est pas un URI "complet"). Qu'est-ce qu'il est relatif à est un peu ambigu à ce stade, sans plus d'informations sur votre configuration. Le temps d'exécution va l'interpréter comme relatif à quelque chose, mais on ne sait pas exactement ce qu'est ce quelque chose. Vous obtiendrez des résultats plus fiables en utilisant l'une des autres méthodes parse, telles que parse(File) ou parse(InputStream). Dans chaque cas, il n'y a aucune ambiguïté quant à ce que vous lui demandez d'analyser.

Si vous décidez de construire un premier objet File (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 aller aussi loin, alors votre problème n'est pas avec DocumentBuilder ou le DOM, c'est avec les chemins de fichiers de base. N'oubliez pas que si vous utilisez des chemins de fichiers relatifs (par exemple new File("resources/majors_xml_db.xml")), cela 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.

+0

J'ai essayé de créer un objet Fichier en utilisant File f = new File("resources/majors_xml_db.xml". Cependant, je rencontre le même problème qu'avant. Je suppose que ce que je ne comprends pas est comment formater correctement la chaîne d'URI. Mon fichier se trouve dans un répertoire de mon MacBook Pro:/Utilisateurs/thechiman/Dropbox/introcs/PSU SOC Crawler/ressources/majors_xml_db.xml Dans Eclipse, j'ai créé un répertoire "resources" dans le répertoire "src" de mon projet. J'ai placé le fichier "majors_xml_db.xml" dans le fichier "resources". Je ne comprends pas comment créer un fichier. S'il vous plaît aider. Merci. – ericso

+0

@thechiman: Voir la réponse éditée – skaffman

+0

Merci, je vais essayer. – ericso