Si, como yo, que realmente quería cargar .properties archivos de su sistema de archivos en lugar de la ruta de clases, pero por lo demás mantener todos la inteligencia relacionados con las operaciones de búsqueda, a continuación, haga lo siguiente:
- crear una subclase de
java.util.ResourceBundle.Control
- anular el método
newBundle()
en este tonto ejemplo, suponga que tiene una carpeta en C:\temp
que contiene una lista plana de".propiedades" archivos:
public class MyControl extends Control {
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
throws IllegalAccessException, InstantiationException, IOException {
if (!format.equals("java.properties")) {
return null;
}
String bundleName = toBundleName(baseName, locale);
ResourceBundle bundle = null;
// A simple loading approach which ditches the package
// NOTE! This will require all your resource bundles to be uniquely named!
int lastPeriod = bundleName.lastIndexOf('.');
if (lastPeriod != -1) {
bundleName = bundleName.substring(lastPeriod + 1);
}
InputStreamReader reader = null;
FileInputStream fis = null;
try {
File file = new File("C:\\temp\\mybundles", bundleName);
if (file.isFile()) { // Also checks for existance
fis = new FileInputStream(file);
reader = new InputStreamReader(fis, Charset.forName("UTF-8"));
bundle = new PropertyResourceBundle(reader);
}
} finally {
IOUtils.closeQuietly(reader);
IOUtils.closeQuietly(fis);
}
return bundle;
}
}
Tenga en cuenta también que este es compatible con UTF-8, que creo que no está soportada por defecto de otro modo
Hola Jon, ¿no le falta esto al problema de localización que sería la razón principal para usar un paquete en primer lugar? –
No hay indicación de que realmente haya obtenido más de un archivo. El hecho de que tenga un sufijo .txt no es muy alentador. Pero sí, fallaría en esa situación. –
En lugar de cargar un archivo manualmente (es decir, con 'FileInputStream') y construir un' ProperyResourceBundle', ¿no debería ser la "forma correcta" utilizar el método 'ResourceBundle.getBundle (...)'? – Vihung