用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);