2017-05-26 17 views
1

のsrc /メイン/リソースのファイルにし、私はabcManager.class.getResource("abc.access")を使用して、それを試してみましたabcManager.java.Javaパスは、私は次のディレクトリ構造とMavenのモジュールを持っている

src 
|-main 
    |-java 
     |-org.abc.xyz 
      |-init 
      |-abcManager.java 
    |-resources 
     |-abc.access 

abc.accessへのパスを取得したいが、それはできますヌル。

私は以下の質問をしましたが、解決策は機能しませんでした。

How to get the path of src/test/resources directory in JUnit?

Can't get path to resource

+0

で働いていました。現在のディレクトリのパスを取得し、 'getResource(" abc.access ")'を実行するときには –

+1

の残りのパスを連結するために、現在のクラスと相対的に見えるので、おそらく '/ abc.access'が必要です。また、https://stackoverflow.com/questions/13967307/reading-from-src-main-resources-gives-nullpointerexception?rq=1 –

+0

@ user7790438を参照してください。ファイルのパスをコピーして、ユーザーディレクトリ部分を削除してみましたSystem.getProperty( "user.dir")+ "rest-of-the-path"というパスを与えました。まだ動作しません –

答えて

1

問題は、pomファイルのmavenビルドにリソースを含めなかったことでした。これは、クラスパスのルートから常にロードされるクラスローダーにも当てはまります。class.getResource( "/ abc.access")私は次のように含まれる場合、それはあなたがはSystem.getProperty(「はuser.dir」)を使用する必要がありますabcManager.class.getResource("/abc.access")

<build> 
    <resources> 
     <resource> 
       <directory>src/main/resources</directory> 
       <includes> 
        <include>abc.access</include> 
       </includes> 
      </resource> 
    </resources> 
</build> 
0

これを試してみてください。

String filename = "abc.access"; 
InputStream in = getClass().getClassLoader().getResourceAsStream(filename); 
+0

またはgetResource(filename)のどちらでも機能しませんでした。 –

0

URL java.lang.Class.getResource(String name)のjavadocをによると:代表団の前に

、絶対リソース名が与えられた から構成され、再このアルゴリズムを使用してソース名:名は「/」(「\のu002f」)で始まる場合

  • は、次いで リソースの絶対名は「/」以下の名前の一部です。
    そうでない場合は、
  • 絶対名は、次の形式のものである:

    modified_pa​​ckage_name /名前modified_pa​​ckage_nameは、 '/' の代わりにこのオブジェクトのパッケージ名で

'' ( '\ u002e')。

あなたが起動します。

abcManager.class.getResource("abc.access") 

あなたは"/"文字とパスの接頭辞はありません。だから、あなたは2番目の方法を使用します。
パッケージ(またはフォルダ)のorg.abc.xyz.initにリソースを配置する必要がありますが、そのリソースはresourcesフォルダのルートにあるため、この場合は該当しません。
Mavenでは、resourcesがリソースのベースディレクトリです。

abcManager.class.getResource("/abc.access") 

するか、あなたは、単にそれを行うことができます:
だから、最初の方法を呼び出すことによって、リソースを取得することができます

getClass().getResource("/abc.access") 
+0

私はこれを試みたが、まだnullを与える –

0

後は動作するはずです。

InputStream resourceAsStream = 
        abcManager.class.getClassLoader().getResourceAsStream("abc.access"); 

IDE(Ex。Eclipse)内で作業していることが条件です。 これをコマンドラインから試している場合は、明示的にクラスパスを設定する必要があります。

0

class.getResourceはクラスに対してローカルで、この場合はorg.abc.xyz.initパッケージです。src/main/resources/org/ABC/xyz/init/abc.accessを読み込もうとしています。

関連する問題