getClass().getResource() によるファイルのロード
getClass().getResource() メソッドを使用してリソース ファイルをロードできます。 。 Eclipse などの開発環境からデプロイされた場合、このメソッドは通常、シームレスに機能します。ただし、コマンド ラインからアプリケーションを実行すると、ヌル ポインター例外が発生する場合があります。
この問題は、getClass().getResource() がクラス ローダーを利用してリソースを取得するために発生します。アクセスできるようにするには、リソースがクラスパスに含まれている必要があります。 Eclipse を使用する場合、ソース フォルダーとそのすべてのコンポーネント (リソース ファイルを含む) は、デフォルトでクラスパスに配置されます。したがって、リソースはクラスと同じパッケージまたはディレクトリからロードできます。
対照的に、コマンド ラインから実行する場合、クラスパスは自動的に構成されません。リソースを含むファイルまたはディレクトリは、クラスパスに明示的に追加する必要があります。これを実現する 1 つの方法は、CLASSPATH 環境変数をファイルまたはディレクトリのパスに設定することです。
コードに示されているように FileInputStream を直接使用することは、リソースの読み込みには推奨されないことに注意することが重要です。代わりに、getResourceAsStream() を使用して、InputStream を取得します。これにより、JAR ファイルとしてデプロイするとき、またはネットワーク経由でクラスをロードするときの互換性が確保されます。
さらに、getResource() メソッドを使用すると、クラスパッケージを基準としたリソースの場所を指定できます。例:
Foo.class.getResourceAsStream("Test.properties")
Foo と同じパッケージから Test.properties をロードします。
Foo.class.getResourceAsStream("/com/foo/bar/Test.properties")
com.foo.bar パッケージから Test.properties をロードします。
これらのガイドラインに従うことで、コマンド ラインからアプリケーションを実行するときに getClass().getResource() を使用してリソース ファイルを正常にロードできます。
以上がコマンドラインから実行すると getClass().getResource() が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。