2013-05-01 10 views
7

私のプロジェクトには次の構造があります。Javaのファイルパスまたはファイルの場所 - 新しいファイル()

Eclipseで

a.java

myPorjectName 
    src 
    com.example.myproject 
     a.java 
    com.example.myproject.data 
     b.xml 

、私は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を置いてみましたが、サブフォルダを入れているのではなく、まだが動作しません。。これがうまくいくなら、私の場合はnew File("data/b.xml")を使用することができますか?なぜこれが動作していないのか分かりません。

+2

最も可能性の高い、より 'のgetClass()getResourceAsInputStream( "/ COM /例/ MyProjectと/データ/ b.xml")のようになるだろう;' – MadProgrammer

+0

それはあなたの**デフォルトのディレクトリので、働いていない(つまりjavaが実行されています)からです。**は 'myPorjectName'です。これは' myproject'にありません。 – xagyg

+0

xagygとMadProgrammerのコメントは私が間違っている理由を理解させてくれます。君たちありがとう。以下の答えは私に何かもっと学ばせる。 – Joey

答えて

17

それはクラスパスに、同じパッケージ内にすでにある場合は、

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

OR、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 
+0

私はこれが最善の方法だと思っています! – buch11

+0

同じパッケージに入っていないとどうなりますか?私の例では、a.javaはcom.example.myprojectにあります。 b.xmlはcom.example.myproject.dataにあります。 – Joey

+1

私は答えを編集しました。 – NINCOMPOOP

関連する問題