Domanda

Sto scrivendo un programma in Java dove ho letto i dati da un file XML e analizzarlo. Il file viene importato in una cartella denominata "Risorse" nella directory src del mio progetto. Sto utilizzando Eclipse. Quando eseguo il programma, ottengo il seguente errore:

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 di riferimento è 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.

È stato utile?

Soluzione

Con DocumentBuilder.parse(String) , l'argomento viene interpretato come un URI, e in questo caso, sta andando ad essere un parente URI (la stringa si sta dando non è un 'pieno' URI). Che cosa è relativa a è un po 'ambigua, a questo punto, senza ulteriori informazioni sulla configurazione. Il runtime sarà interpretandolo come relative al qualcosa , ma non è chiaro che cosa qui che qualcosa è.

Si otterrà risultati più affidabili utilizzando uno degli altri metodi parse, come ad esempio parse(File) o parse(InputStream) . In ogni caso, non c'è alcuna ambiguità su ciò che si sta 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 è possibile arrivare così lontano, quindi il problema non è con DocumentBuilder o il DOM, è con i percorsi dei file di base. Ricordate che se si utilizzano percorsi di file relativi (ad esempio new File("resources/majors_xml_db.xml")) allora questo sarà risolto relativo alla directory di lavoro del processo. Se funziona o no dipende da come si avvia il programma.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top