Ben fark arasındadır merak Class.getResource()
ve ClassLoader.getResource()
?
edit: Özellikle herhangi bir önbellek dosya / dizin düzeyinde dahil olup olmadığını bilmek istiyorum. "Dizin listeleri Sınıf sürümünde önbelleğe alınmış mı?"
AFAIK aşağıdakileri esasen aynı şekilde yapmalıdır, ancak değildir:
getClass().getResource()
getClass().getClassLoader().getResource()
Bunu WEB-INF/classes/
, o dizindeki mevcut bir dosyadan yeni bir dosya oluşturan bazı rapor oluşturma kodlarıyla uğraşırken keşfettim . Class'tan yöntemi kullanırken getClass().getResource()
, dağıtım sırasında orada bulunan dosyaları bulabilirim , ancak yeni oluşturulan dosyayı almaya çalışırken boş bir nesne aldım. Dizine göz atmak, yeni dosyanın orada olduğunu açıkça gösterir. Dosya adları "/myFile.txt" dosyasında olduğu gibi eğik çizgi ile eklenmiştir.
ClassLoader
Sürümü getResource()
diğer taraftan oluşturulan dosyayı buldunuz. Bu deneyimden, dizin listesinin önbelleğe alınmasının bir tür olduğu görülmektedir. Haklı mıyım ve eğer öyleyse, bu nerede belgeleniyor?
Gönderen API docs üzerindeClass.getResource()
Belirli bir ada sahip bir kaynak bulur. Belirli bir sınıfla ilişkili kaynakları arama kuralları, sınıfın tanımlayıcı sınıf yükleyicisi tarafından uygulanır. Bu yöntem, bu nesnenin sınıf yükleyicisine yetki verir. Bu nesne bootstrap sınıf yükleyicisi tarafından yüklendiyse, yöntem ClassLoader.getSystemResource (java.lang.String) için temsilci seçer.
Bana göre, bu "Class.getResource gerçekten kendi sınıf yükleyicinin getResource () diyor." Bu da yapmakla aynı olurdu getClass().getClassLoader().getResource()
. Ama öyle değil. Birisi bana bu konuda biraz ışık verebilir mi?