26 Mart 2019 Salı

ClassLoader İle Resource Yüklemek

Giriş
ClassLoader'a erişmenin üç yolu var.

1. Thread.currentThread().getContextClassLoader()
Açıklaması şöyle.
if you are in a multi-ClassLoader environment (such as unit testing, webapps, etc.) you may need to use Thread.currentThread().getContextClassLoader().
2. ClassLoader.getSystemClassLoader()
Bu çağrı ile sistem ClassLoader nesnesi de kullanılabilir.

3. this.getClass().getClassLoader

Verilen Dosya İsmi
src/main/resource/MyFile.txt dosyasına erişmek için şöyle yaparız.
InputStream input = classLoader.getResourceAsStream("MyFile.txt");
getResource metodu
URL döner. Bir Uri döndürür. Erişilen dosya veya dizinin dosya sistemi üzerinde olması gerekir.
Örnek
Şöyle yaparız.
URL url = ClassLoader.classr.getResource(resource);
URL'den dosya almak için şöyle yaparız.
File file = new File(url.toURI());

Örnek
Dosya için şöyle yaparız.
System.out.println(classLoader.getResource("foo/Test.class"));
Çıktı olarak şunu alırız.
file:/C:/Users/Jon/Test/foo/Test.class
Örnek
Dizin için şöyle yaparız.
ClassLoader classLoader = this.getClass().getClassLoader();
Path configFilePath = Paths.get(classLoader.getResource("config").toURI());    

getResourceAsStream metodu
Bir InputStream döndürür. Classpath içindeki bir dosyaya erişmek için yolun "/" ile başlamaması gerekir.

Örnek
Şöyle yaparız.
InputStream input = classLoader.getResourceAsStream("foo.properties");
Örnek
Şöyle yaparız.
ClassLoader.class.getResourceAsStream("path/file.ext");
Örnek
Şöyle yaparız.
InputStream is = Thread.currentThread().getContextClassLoader()
  .getResourceAsStream("META-INF/maven/a/b/pom.xml");
getSystemResources
Enumeration<URL> döner. Belirtilen isme sahip tüm kaynakların URL'sini döner.
Örnek
Şöyle yaparız.
Enumeration<URL> configs =  classLoader.getSystemResources
  ("META-INF/services/com.foo.bar.MyService");
getSystemResourceAsStream metodu
Örnek ver

Hiç yorum yok:

Yorum Gönder