Если вы можете изменить все invokations из ResourceBundle.getResource, вы можете пройти самостоятельно реализация ResourceBundle.Control кэшировать URL, с которого фактически загружена разрешенная пучок
public class ResourceBundleSourceControl extends ResourceBundle.Control {
private static final Map<ResourceBundle, URL> sources =
new HashMap<ResourceBundle, URL>();
private String bundleName;
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format,
ClassLoader loader, boolean reload) throws IllegalAccessException,
InstantiationException, IOException {
ResourceBundle rb = super.newBundle(baseName, locale, format, loader, reload);
URL sourceURL = loader.getResource(toResourceName(bundleName, "properties"));
if(rb != null && sourceURL != null) {
synchronized(sources) {
sources.put(rb, sourceURL);
}
}
return rb;
}
@Override
public String toBundleName(String arg0, Locale arg1) {
bundleName = super.toBundleName(arg0, arg1);
return bundleName;
}
public static URL getSourceURL(ResourceBundle b) {
synchronized (sources) {
return sources.get(b);
}
}
недостаток заключается в том, что вы должны передать экземпляр этого класса для каждого вызова ResourceBundle.getBundle. Так как пакеты ресурсов лениво кэшированы, вы не можете быть уверены, что каждое извлечение пакета действительно загрузит его, что необходимо для реализации Control, чтобы его поймать.
После загрузки пакета, вы можете использовать статический метод getSourceURL, чтобы найти URL, из которого он был на самом деле загружен:
ResourceBundle rb = ResourceBundle.getBundle(
"props.Default", new ResourceBundleSourceControl());
System.out.println(
"URL: " + ResourceBundleSourceControl.getSourceURL(rb));
, что, как вы получите ResourceBundle данного класса. OP спрашивает, как получить файл/класс/URL, заданный ResourceBundle, который плавает вверх по течению, а не по течению. –
Спасибо! Это в значительной степени то, что я сделал. Затем, поскольку я контролировал, как я получал ResourceBundle, я вернулся и разложил его и просто загрузил объект Properties из этого URL-адреса, повторно используя URL-адрес позже, когда мне нужно было перейти к файлу: новый файл (location.toURI()) – skiphoppy