5

XMLファイルからデータを読み込んで解析するプログラムをJavaで書いています。ファイルは、プロジェクトの src ディレクトリにある「Resources」という名前のフォルダーにインポートされます。私はエクリプスを使用しています。プログラムを実行すると、次のエラーが表示されます。

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

関連するコードは次のとおりです。

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

ファイルがあるのに FileNotFoundException が発生する理由がわかりません。助けてくれてありがとう。

4

1 に答える 1

6

ではDocumentBuilder.parse(String)、引数は URI として解釈され、この場合は相対 URI になります (指定する文字列は「完全な」URI ではありません)。セットアップに関する詳細情報がなければ、この時点では少しあいまいですランタイムはそれを何かに関連するものとして解釈しますが、それが何であるかはここでは明確ではありません。

またはparseなどの他の方法のいずれかを使用すると、より信頼性の高い結果が得られます。いずれの場合も、何を解析するように求めているかについてあいまいさはありません。parse(File)parse(InputStream)

File最初にオブジェクトを作成する(parse後で渡す) ことにした場合、そのファイルが存在することを確認する (などを使用するFile.exists()) というより管理しやすい問題があります。そこまで到達できない場合、問題はDocumentBuilderDOM ではなく、基本的なファイル パスにあります。相対ファイル パス (例: new File("resources/majors_xml_db.xml")) を使用する場合、これはプロセスの作業ディレクトリに対して相対的に解決されることに注意してください。機能するかどうかは、プログラムの起動方法によって異なります。

于 2010-04-04T22:14:43.997 に答える