MissingResouceException even when the resource exists
ResourceBundle.getBundle() throws MissingResourceException when resource files are available and were created at runtime just before the call.
The method works the second time around when the files are already available.
Here is a sample program that does just that. The program creates a dummy .properties file and then calls
ResourceBundle.getBundle()
Test Program:
import java.util.ResourceBundle;
import java.util.Locale;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
class DynResTest {
public void dynResourceTest() throws Exception {
File f = new File("dynresources");
if (!f.isDirectory()) {
if (f.mkdir()) {
FileWriter fileWriter = new FileWriter("dynresources/dynres.properties");
String line = "key=value\n";
fileWriter.write(line, 0, line.length());
fileWriter.flush();
fileWriter.close();
System.out.println("Created dynresources/dynres.properties");
}
}
FileReader fileReader = new FileReader("dynresources/dynres.properties");
char[] buf = new char[512];
int read = fileReader.read(buf);
System.out.println("\n<-dynresources/dynres.properties contains->");
String s = new String(buf, 0, read);
System.out.println(s);
Locale defaultLocale = Locale.getDefault();
String os = System.getProperty( "os.name" );
String variant = "";
if ( os.startsWith( "Mac" ) )
{
variant = "mac";
}
else if ( os.startsWith( "Win" ) )
{
variant = "win";
}
Locale locale = new Locale( defaultLocale.getLanguage(), defaultLocale.getCountry(), variant );
System.out.println("Resource is "+ResourceBundle.getBundle("dynres", locale));
}
public static void main(String[] args) {
DynResTest t = new DynResTest();
try {
t.dynResourceTest();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
Output:
C:\test\testj>java -cp ".;./dynresources" DynResTest
Created dynresources/dynres.properties
<-dynresources/dynres.properties contains->
key=value
java.util.MissingResourceException: Can't find bundle for base name dynres, locale en_US_WIN
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at DynResTest.dynResourceTest(DynResTest.java:42)
at DynResTest.main(DynResTest.java:48)
C:\test\testj>java -cp ".;./dynresources" DynResTest
<-dynresources/dynres.properties contains->
key=value
Resource is java.util.PropertyResourceBundle@2e000d
C:\test\testj>

