0

Class#getResourceAsStream(String)読み取り用の JavaDoc は次のとおりです。

指定された名前のリソースを検索します。特定のクラスに関連付けられたリソースを検索するためのルールは、クラスの定義クラス ローダーによって実装されます。このメソッドは、このオブジェクトのクラス ローダーに委譲します。

では、以下はどのように機能しますか。

class AppTest {
private static final Properties p = new Properties();    
    static {        
        try {
            p.load(AppTest.class.getResourceAsStream(("config.properties")));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
...
}

config.properties が AppTest.class と同じディレクトリにある場合:

pro/wulfgar/net/on/users/app/{AppTest.class,config.properties} 

AppTest.class のクラスローダーは、アプリケーションのクラスパス (.この場合) でそれを探すべきではありませんか? したがって、config.properties はproディレクトリと同じレベルにある必要があります。

つまり、リソースを と定義しないと、pro/wulfgar/net/on/users/app/config.propertiesなぜクラスローダーがリソースを見つけられるのか理解できません。

4

3 に答える 3

1

これを確認してくださいInputStream is = App.class.getResourceAsStream("test.properties");

Class.getResourceAsStream と ClassLoader.getResourceAsStream には違いがあります

于 2012-09-21T07:35:25.377 に答える
1

JavaDoc の言い回しは、少し混乱するかもしれません。Class.getResourceAsStream(String) は、クラス参照 (pro/wulfgar/net/on/users/app/config.properties) のパッケージ内のリソースを解決します。この方法で解決したくない場合は、リソース名の先頭に「/」を追加して、ベース レベルであることを示します (標準のパッケージ規則に従っている場合は、pro/wulfgar/config.properties)。 )。

この動作は、JavaDoc の後半で概説されています。JavaDoc の引用部分は、そのクラスの ClassLoader に委譲することを説明しています。各 ClassLoader には個別のファイル ソース (jar またはファイル システム) があるため、特定の ClassLoader のリソース セットを区別します。

于 2012-09-21T07:42:03.300 に答える
0

は、パッケージ名のためにClassLoaderあるディレクトリをすでに知っています。AppTest.classプロパティファイルに関するそのような情報はありません。

于 2012-09-21T07:31:51.243 に答える