2017-08-29 4 views
0

自分のクラスと同じレベルの設定ファイルを読めない理由がわかりません。私は以下の両方のコードを試しましたが、両方の入力ストリームがnullです。設定ファイルを読み込み、クラスと同じディレクトリを返します。null

public MyClass 
    public void getConfigurations() 
    { 
     String fileName = "myFile.conf"; 

     InputStream in = this.getClass().getResourceAsStream(fileName); 
     InputStream inNew = this.getClass().getClassLoader().getResourceAsStream(fileName); 
     System.out.println(in); 
     System.out.println(inNew); 
    } 
    public static void main(String[] arg){ 
     MyClass myClass = new MyClass(); 
     myClass.getConfigurations(); 
    } 
} 

出力は次のようになります。ここでは

が私のディレクトリ

MyProject 
    -src 
     -com 
      -test 
       -MyClass.java 
       -myFile.conf 
    -lib 

ある

null 
null 
私はそれが両方で仕事したいと思いますので、実行可能なjarファイルにこのクラスをパッケージ化するつもりです窓とLinux。 jarファイルをパッケージ化するときに、設定ファイルを自分のクラスと同じレベルにします。

私は何かを見逃しましたか?

+1

あなたはコードを実行しますか?あなたのconfファイルは_java_ファイルと同じディレクトリにあります。しかし、コンパイルされた_class_ファイルにもコピーされていますか? – dpr

+0

私は、configファイルなどのリソースを探しているときにあなたのconfファイルをresourcesフォルダに入れるべきだと思います。あなたのケースではどこにあるべきかは本当に決めることができませんが、 "古典的な"構造では、javaクラスのsrc/main/javaとconfigファイルのsrc/main/resourcesのようになります。 –

+0

私はリソースフォルダを使用していません...クラスから読みたいだけでした。自分のクラスから設定ファイルに入力ストリームを開くことができるかどうかを確認しています –

答えて

0

絶対パス(/で始まるパス)を使用しない場合は、ファイルの場所を取得できません。

.classファイルを実行するため、.javaファイルを実行しないためです。クラスを相対パスで別のフォルダに作成する場合、パスは.classファイルの場所に基づいています。

クラスファイルをjavaファイルと同じディレクトリに配置してください。私は今あなたがbuildフォルダに入れていると思います。

または、/src/com/testのようにしてください。これは絶対パスです。

関連する問題