Pergunta

Estou escrevendo um programa em Java onde leio dados de um arquivo XML e os analiso.O arquivo é importado para uma pasta chamada "Recursos" no diretório src do meu projeto.Estou usando o Eclipse.Quando executo o programa, recebo o seguinte erro:

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

O código relevante está aqui:

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

Não entendo por que estou recebendo FileNotFoundException quando o arquivo está lá.Obrigado pela ajuda.

Foi útil?

Solução

Com DocumentBuilder.parse(String), o argumento é interpretado como um URI e, neste caso, será um URI relativo (a string que você está fornecendo não é um URI "completo").O que é relativo para é um pouco ambíguo neste ponto, sem mais informações sobre sua configuração.O tempo de execução irá interpretá-lo como relativo a algo, mas não está claro aqui o que é esse algo.

Você obterá resultados mais confiáveis ​​usando um dos outros parse métodos, como parse(File) ou parse(InputStream).Em cada caso, não há ambigüidade quanto ao que você está pedindo para analisar.

Se você decidir construir um File objeto primeiro (para passar para parse mais tarde), então você terá um problema mais gerenciável de garantir que esse arquivo exista (usando File.exists() e assim por diante).Se você não consegue chegar tão longe, então seu problema não é DocumentBuilder ou o DOM, é com caminhos de arquivo básicos.Lembre-se de que se você usar caminhos de arquivo relativos (por exemplo, new File("resources/majors_xml_db.xml")), então isso será resolvido em relação ao diretório de trabalho do processo.Se funciona ou não depende de como você inicia seu programa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top