Java では、類似した API を使用してさまざまなリソースをロードできますが、URL プロトコルは異なります。これにより、リソースの読み込みプロセスをアプリケーションから切り離すことができ、リソースの構成が簡素化されます。
Jar プロトコルに似ていますが、元のファイルやソースを指定せずに、現在のクラスローダーを使用してリソースを取得するプロトコルを利用できますか?フォルダー?
これはカスタムを実装することで実現できます。 URLStreamHandler を作成し、JVM に登録します。
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(); } }
使用法: カスタム ハンドラーは次のことができます。クラスパスからリソースをロードするための URL とともに使用できます:
new URL("classpath:org/my/package/resource.extension").openConnection();
ハンドラーをグローバルにアクセスできるようにするには、 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 サイトの他の関連記事を参照してください。