2010-04-04 23 views
5

Sto scrivendo un programma in Java in cui leggo i dati da un file XML e li analizzo. Il file viene importato in una cartella denominata "Risorse" nella directory src del mio progetto. Sto usando Eclipse. Quando eseguo il programma, ottengo il seguente errore:FileNotFoundException durante la lettura del file .xml per analizzare

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) 
... 

Il codice rilevante è qui:

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(); 
    } 
} 

Non capisco perché sto ottenendo il FileNotFoundException quando il file è lì. Grazie per l'aiuto.

+1

Questo potrebbe non essere un problema, ma ho pensato che avrei notato che nella tua descrizione hai chiamato la cartella "Risorse" e nel codice è "risorse". Su un sistema operativo con percorsi sensibili al maiuscolo/minuscolo, questo potrebbe causare un problema. – Ash

+0

La lettera maiuscola era un errore di battitura. è "risorse" in entrambi i posti. – ericso

+0

Hai provato a utilizzare questa istruzione? System.getProperty ("user.dir") –

risposta

6

Con DocumentBuilder.parse(String), l'argomento è interpretato come un URI e, in questo caso, sarà un URI relativo (la stringa che viene fornita non è un URI "completo"). Che cosa è relativo a è un po 'ambiguo a questo punto, senza ulteriori informazioni sulla configurazione. Il runtime lo interpreterà come relativo a qualcosa di, ma non è chiaro qui quale sia quel qualcosa.

Otterrete risultati più affidabili utilizzando uno degli altri metodi parse, ad esempio parse(File) o parse(InputStream). In ogni caso, non c'è alcuna ambiguità su ciò che stai chiedendo di analizzare.

Se si decide di costruire un oggetto File prima (per passare a parse dopo), allora avete un problema più gestibile di fare in modo che il file esiste (utilizzando File.exists() e così via). Se non puoi arrivare così lontano, allora il tuo problema non è con DocumentBuilder o il DOM, è con percorsi di file di base. Ricorda che se utilizzi percorsi di file relativi (ad esempio new File("resources/majors_xml_db.xml")), questo verrà risolto in relazione alla directory di lavoro del processo. Se funziona o meno dipende da come si avvia il programma.

+0

Ho provato a creare un oggetto File utilizzando File f = new File("resources/majors_xml_db.xml". Tuttavia, mi imbatto nello stesso problema di prima. Immagino che quello che non capisco è come formattare correttamente la stringa URI. Il mio file si trova in una directory sul mio MacBook Pro:/Users/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml In Eclipse, ho creato una directory "resources" nella directory "src" del mio progetto. Ho inserito il file "majors_xml_db.xml" nel file "resources". Non capisco come creare un file. Per favore aiuto. Grazie. – ericso

+0

@thechiman: Vedi risposta modificata – skaffman

+0

Grazie, ci provo. – ericso

Problemi correlati