Class.getsResource AstreamとClass Loader.getsResource Astream方法に使用されるリソースパスの解釈

1848 ワード

これは基礎的な問題であり、ここではいくつかの例を提供し、この問題の迅速な理解と記憶を助ける.
この方法の文書:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream%28java.lang.String%29 では、受信経路がどのように定義されているかを詳細に説明しています.本文の出所: blog.cdn.net/bluishglc/articale/detail/38753047はいかなる形式の転載を厳禁して、さもなくばCSDNの公式に権益を維持するように依頼します!
Class.get Resource AsStreamについて
まず、私たちが最初にルートを解かなければなりません.「/」はどのように定義されていますか?これは私たちがgetsResource Astreamを使って正確にファイルをロードすることに重要です.まず、このルートが対応するクラスのルートディレクトリであることを理解したいです.どういう意味ですか?もし一つのプロジェクトがコンパイルされたら、次のようなクラスファイルとディレクトリ構造が生成されます.
com
   |-github
          |-demo
          |    |-A.class
          |    |-1.txt
          |-B.class
          |-2.txt
このようなコンパイル出力ディレクトリの下で、ファイル「1.txt」の絶対パス名は「/com/github/demo/1.txt」です. ファイル「2.txt」の絶対パス名は「/com/github/2.txt」です. 
getsResource AssStreamメソッドドキュメントの説明のように、先頭は絶対パスであり、クラスパスとは違って経路上の「."を変更しました」/"です.
次は私達が相対パスを見ます.
まず「相対」経路を明確にしなければならない.常に現在のクラスに対するパスを指す.
例えば、私達が使うなら
InputStream is=A.class.getsResource AssStream(「1.txt」)
パスは/で始まるのではなく、これは相対パスです.相対的にA.classというファイルです.だから、ここの「1.txt」の正確な位置はA.classと同じディレクトリの下にある1.txtファイルです.このファイルは存在します.
もし私たちが相対的な経路でAを通して2.txtをロードすると、経路はこう記述されるべきである.
InputStream is=A.class.getsResource AssStream('./2.txt);   
はい、"."で上のディレクトリを表します.
もし私たちが相対的な経路でBを通して1.txtをロードするなら、経路はこう記述されるべきである.   
InputStream is=B.class.getsResource AssStream(「demo/1.txt」)   
注意してください.demo前にはありません.これは相対パスです.Bのカバンの中の1.txtファイルに対して、このパスも正しいです.Class Loader.getsResource Astreamclass.gets Resource Astreamファイルは最終的にClass Loader.getsource Aspream Streamが呼び出されました.これは前にパラメータを調整しました.そうでなければ、現在のクラスのパケット名をパラメータの前に追加します.Class Loader.getsResource AssStreamを使用する場合、パスは直接にclasspathに対する絶対パスを使用します.そして、すでに/先頭はできません.Input Stream=Class Loader.gets SystemResource Aream Stream(「com/gistream.com/githubream.」Stream/dext 1)