20 Mayıs 2019 Pazartesi

Class İle Resource Yüklemek

Giriş
Açıklaması şöyle.
This method delegates the call to its class loader, after making these changes to the resource name: if the resource name starts with "/", it is unchanged; otherwise, the package name is prepended to the resource name after converting "." to "/". If this object was loaded by the bootstrap loader, the call is delegated to ClassLoader.getSystemResource.
Yani mutlak yol (absolute path) veya göreceli yol (relative path) kullanılabilir. Mutlak yol olması için yolun "/" ile başlaması gerekir. Her iki kullanım da ClassLoader'a delege edilir. ClassLoader İle Resource Yüklemek yazısına bakabilirsiniz.


getResource metodu
Örnek
path relative ise sınıfın paketinden itibaren arama yapılır.Şu iki kod aynı kapıya çıkar.
foo.bar.Baz.class.getResource("xyz.txt");
foo.bar.Baz.class.getClassLoader().getResource("foo/bar/xyz.txt");
path absolute ise belirtilen yerdeki kaynak için URL döndürülür. Şu iki kod aynı kapıya çıkar.
foo.bar.Baz.class.getResource("/data/xyz.txt");
foo.bar.Baz.class.getClassLoader().getResource("data/xyz.txt");
Döndürülen URL null olabilir. Şöyle yaparız.
String path = ...;
java.net.URL url = getClass().getResource(path);
if (url != null) {
  ...
}
Spring ile bu metodun işlevini yapmak daha kolay. Şöyle bir dizin yapısı olsun. src/main/config classpath içinde olsun.
--src
  --> main
   --> config (*)
    --> app
     --> context
      --> reference
       --> user
        --> user.xml
Şöyle yaparız.
Resource r = new ClassPathResource("/app/context/references/user/user.xml");
File file = r.getFile();
Örnek
Şöyle yaparız
URL url = Object.class.getResource("Object.class");
System.out.println(url);
Java 8 ve altında çıktı olarak şunu alırız.
jar:file:/path-to-jre/lib/rt.jar!/java/lang/Object.class
Java 9'da çıktı olarak şunu alırız.
jrt:/java.base/java/lang/Object.class
getResourceAsStream metodu
Proje'de src/resources/Dates.xlsx dosyası olsun. Proje jar yapısına çevrildikten sonra öyle yaparız.
clazz.getResourceAsStream("resources/Dates.xlsx");

Hiç yorum yok:

Yorum Gönder