ホームページ  >  記事  >  Java  >  カスタム URL プロトコルを使用して Java クラスパスからリソースをロードするにはどうすればよいですか?

カスタム URL プロトコルを使用して Java クラスパスからリソースをロードするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-21 20:32:10143ブラウズ

How Can I Load Resources from the Java Classpath Using a Custom URL Protocol?

Java のクラスパスからリソースをロードするための URL

Java では、類似した API を使用してさまざまなリソースをロードできますが、URL プロトコルは異なります。これにより、リソースの読み込みプロセスをアプリケーションから切り離すことができ、リソースの構成が簡素化されます。

Jar プロトコルに似ていますが、元のファイルやソースを指定せずに、現在のクラスローダーを使用してリソースを取得するプロトコルを利用できますか?フォルダー?

実装

これはカスタムを実装することで実現できます。 URLStreamHandler を作成し、JVM に登録します。

基本実装

  1. URLStreamHandler を作成します: このハンドラーにより、指定された URL で接続を開くことができます。 URLStreamHandler クラスを拡張し、openConnection メソッドを実装する必要があります。実装では、提供されたクラスローダーを使用してリソースを見つけ、そのリソースへの接続を開く必要があります。
  2. コード: 次の Java コードは、カスタム ハンドラー実装の例を示します:
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
import java.util.HashMap;
import java.util.Map;

public class ClasspathHandler extends URLStreamHandler {
    private final ClassLoader classLoader;

    public ClasspathHandler(ClassLoader classLoader) {
        this.classLoader = classLoader;
    }

    @Override
    protected URLConnection openConnection(URL u) throws IOException {
        // Locate the resource using the classloader
        URL resourceUrl = classLoader.getResource(u.getPath());
        // Open the connection to the resource
        return resourceUrl.openConnection();
    }
}
  1. 使用法: カスタム ハンドラーは次のことができます。クラスパスからリソースをロードするための URL とともに使用できます:

    new URL("classpath:org/my/package/resource.extension").openConnection();

JVM ハンドラーの登録

ハンドラーをグローバルにアクセスできるようにするには、 URLStreamHandlerFactory:

import java.net.URL;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
import java.util.HashMap;
import java.util.Map;

public class ClasspathHandlerFactory implements URLStreamHandlerFactory {
    private final Map<String, URLStreamHandler> protocolHandlers;

    public ClasspathHandlerFactory() {
        protocolHandlers = new HashMap<String, URLStreamHandler>();
        addHandler("classpath", new ClasspathHandler(ClassLoader.getSystemClassLoader()));
    }

    public void addHandler(String protocol, URLStreamHandler handler) {
        protocolHandlers.put(protocol, handler);
    }

    public URLStreamHandler createURLStreamHandler(String protocol) {
        return protocolHandlers.get(protocol);
    }
}

次のコマンドを使用して URL.setURLStreamHandlerFactory() を呼び出します。

ライセンス

提供された実装はパブリック ドメインにリリースされます。作成者は、変更を共有して公開することを推奨しています。

追加メモ

このアプローチは柔軟性を提供しますが、複数の JVM ハンドラー ファクトリ登録の可能性や、 Tomcat による JNDI ハンドラーの使用。したがって、目的の環境でテストすることをお勧めします。

以上がカスタム URL プロトコルを使用して Java クラスパスからリソースをロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。