为什么Java会忽略.properties文件的第一行?

时间:2014-07-17 17:35:17

标签: java properties-file

我正在使用的应用加载.properties文件java.util.Properties,如下所示:

Properties _properties = new Properties();
_properties.load(new FileInputStream("app.properties"));

属性文件(最初)是这样的:

app=myApp
dbLogin=myDbLogin
version=0.9.8.10
server=1
freq=10000
stateGap=360000

奇怪的是,当我调用_properties.getProperty("app")时,它总是返回null,但是我可以加载所有其他属性而没有任何问题。我通过在属性文件的顶部添加注释来解决问题,然后一切正常。

我的问题是:为什么Java会这样做?我似乎无法找到任何关于此的文档,这似乎是违反直觉的。

2 个答案:

答案 0 :(得分:4)

感谢@ KonstantinV.Salikhov和@pms帮助他们寻求帮助;我决定发布为了拯救人们通过评论而发现的答案。

问题是我的文件编码错误,如下所述:http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html

  

load(Reader)/ store(Writer,String)方法以下面指定的简单的面向行的格式从基于字符的流加载和存储属性。 load(InputStream)/ store(OutputStream,String)方法的工作方式与load(Reader)/ store(Writer,String)对的工作方式相同,只是输入/输出流以ISO 8859-1字符编码进行编码

(强调我的)。

我将属性文件的编码更改为ISO-8859-1,一切正常。

答案 1 :(得分:3)

Java无法正确处理BOM - 您可以在属性中将其视为关键字。可以保存文件UTF-8但没有BOM。例如在vim中

:set nobomb

See vim wiki