web-dev-qa-db-ja.com

Java-new file()のファイルパスまたはファイルの場所

私のプロジェクトには次の構造があります。

Eclipseの場合:

_myPorjectName
  src
    com.example.myproject
        a.Java
    com.example.myproject.data
        b.xml
_

_a.Java_で、_b.xml_ファイルを読みたい。どうやってやるの?具体的には、_a.Java_で次のコードを使用しました。

_DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("data/b.xml"));
_

このコードは_b.xml_を見つけることができません。ただし、パスを_src/com/example/myproject/data/b.xml_に変更すると、機能します。現在の場所は、プロジェクトファイルのルートにあるようです。

しかし、私は他の人の例を見ます_b.xml_と_a.Java_が同じフォルダーにある場合、new File("b.xml")を直接使用できますしかし、私は_b.xml_は、サブフォルダーに入れるのではなく、_a.Java_と同じフォルダーにありますが、それでも機能しませんです。これが機能する場合、私の場合、new File("data/b.xml")を使用できるはずです。これがなぜ機能しないのか、私には本当にわかりません。

10
Joey

すでにクラスパスと同じパッケージにある場合は、使用します

URL url = getClass().getResource("b.xml");
File file = new File(url.getPath());

または、InputStreamとして読み取ります:

InputStream input = getClass().getResourceAsStream("b.xml");

staticメソッド内で使用できます

InputStream in = YourClass.class.getResourceAsStream("b.xml");

ファイルがファイルにアクセスしようとしているクラスと同じパッケージにない場合は、'/'で始まる相対パスを指定する必要があります。

ex : InputStream input = getClass().getResourceAsStream
           ("/resources/somex.cfg.xml");which is in another jar resource folder
20
NINCOMPOOP