用Java读取属性文件

我有以下代码试图读取属性文件:

Properties prop = new Properties(); ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream stream = loader.getResourceAsStream("myProp.properties"); prop.load(stream); 

我在最后一行得到一个exception。 特别:

 Exception in thread "main" java.lang.NullPointerException at java.util.Properties$LineReader.readLine(Properties.java:418) at java.util.Properties.load0(Properties.java:337) at java.util.Properties.load(Properties.java:325) at Assignment1.BaseStation.readPropertyFile(BaseStation.java:46) at Assignment1.BaseStation.main(BaseStation.java:87) 

谢谢,尼科斯

根据你的例外情况, InputStream是空的,这意味着类加载器没有find你的属性文件。 我猜myProp.properties是在你的项目的根,如果是这样的话,你需要一个前面的斜线:

 InputStream stream = loader.getResourceAsStream("/myProp.properties"); 

您可以在此页面上find信息:
http://www.mkyong.com/java/java-properties-file-examples/

 Properties prop = new Properties(); try { //load a properties file from class path, inside static method prop.load(App.class.getClassLoader().getResourceAsStream("config.properties")); //get the property value and print it out System.out.println(prop.getProperty("database")); System.out.println(prop.getProperty("dbuser")); System.out.println(prop.getProperty("dbpassword")); } catch (IOException ex) { ex.printStackTrace(); } 

您可以使用ResourceBundle类来读取属性文件。

 ResourceBundle rb = ResourceBundle.getBundle("myProp.properties"); 

您的文件应该在classpath中以com/example/foo/myProps.properties提供。 然后加载它:

 props.load(this.getClass().getResourceAsStream("myProps.properties")); 

你不能使用这个关键字 –

 props.load(this.getClass().getResourceAsStream("myProps.properties")); 

在静态的情况下。

最好的办法是获得应用程序上下文,如 –

 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/META-INF/spring/app-context.xml"); 

那么你可以从类path加载资源文件 –

 //load a properties file from class path, inside static method prop.load(context.getClassLoader().getResourceAsStream("config.properties")); 

这将适用于静态和非静态上下文,最好的部分是这个属性文件可以在应用程序类path中包含的任何包/文件夹中。

 Properties prop = new Properties(); try { prop.load(new FileInputStream("conf/filename.properties")); } catch (IOException e) { e.printStackTrace(); } 

conf/filename.properties基于项目根目录

确保文件名是正确的,并且该文件实际上是在类path中。 如果不是导致最后一行抛出exception的情况, getResourceAsStream()将返回null。

如果myProp.properties位于项目的根目录中,请改为使用/myProp.properties

鉴于上下文loader.getResourceAsStream(“myPackage / myProp.properties”)应该使用。

前导'/'不能用于ClassLoader.getResourceAsStream(String)方法。

或者,您可以使用Class.getResourceAsStream(String)方法,该方法使用“/”来确定path是绝对还是相对于类位置。

示例:myClass.class.getResourceAsStream(“myProp.properties”)myClass.class.getResourceAsStream(“/ myPackage / myProp.properties”)

您可以使用java.io.InputStream来读取文件,如下所示:

 InputStream inputStream = getClass().getClassLoader().getResourceAsStream(myProps.properties);