Properties class has no method or constructor that takes encoding or locale parameter. Fortunately, in Java SE 6, two new methods were added to allow for reading from java.io.Reader and writing to java.io.Writer:
public synchronized void load(Reader reader) throws IOException; public void list(PrintWriter out)So you can create Reader or Writer instances with appropriate encoding, and pass them to Properties load or list methods. For example,
import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Properties; import org.junit.Test; public class MyTest { @Test public void loadPropertiesTest() throws Exception { final File jndiPropertiesFile = new File(System.getProperty("user.home"), "tmp/jndi.properties"); final FileInputStream fileInputStream = new FileInputStream(jndiPropertiesFile); // FileReader does not have any constructor that takes encoding, so use InputStreamReader instead final InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); final Properties jndiProperties = new Properties(); jndiProperties.load(inputStreamReader); //now dump the properties to verify jndiProperties.list(System.out); } }Output from running loadPropertiesTest test:
-- listing properties -- java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=jnp://localhost:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
Add a comment