解析属性文件中的数值时是否出现NumberFormatException?

时间:2015-10-18 00:49:29

标签: java properties-file numberformatexception

我试图从一个属性文件中获取我的Java程序中的值,该文件是在服务器机器上使用python脚本编写的。

程序在本地工作正常,但是当我尝试将属性文件中的整数值转换为程序的变量时,在服务器上我得到空指针异常例如

db_port=34

我做:

int a =  Integer.parseInt(p.getProperty("db_port").trim());

正如我之前提到的,这只会导致服务器出现问题,但在localhost上它可以正常工作。 这也发生在我的客户端和中间件机器上。 两者都具有相同的错误,该错误在文件的此retreiving属性值处停止。 但是在localhost上我手动编写了一个属性文件,在服务器上使用这个脚本生成它。

我编写属性文件的方式是在一个配置文件中,该文件包含值,我的脚本从那里获取值并将它们写入属性文件以放在不同的机器上(IN PYTHON):

prop_file_on_local_machine_S = '%s/middleware.properties'%directory
with open(prop_file_on_local_machine_S,'w') as f:

        for keys in configFile.options("middleware_props"):
          f.write("%s=%s\n"%(keys,configFile.get("middleware_props",keys)))

我一直在研究这个问题10个小时,感谢任何帮助。

编辑:我想提一下,字符串读得很好,整数不是。

编辑2:

String sp = "/local/r/properties/middleware.properties";
        Properties p = new Properties();

            p.load(new FileInputStream(sp));
            this.serverhost = p.getProperty("Serverhost");
            this.serverport = Integer.parseInt(p.getProperty("Serverport").trim());
            this.buffersize = Integer.parseInt(p.getProperty("Clientmessagesize").trim());

这是我加载属性文件的方式。

编辑:当我自己在本地创建属性文件时,它可以工作,但是当我使用python生成的文件时也会出现错误。 看起来有点像这样:

serverport =5555
serverhost =dryad04.ethz.ch
clientmessagesize =200

我猜那就是问题所在,我的python代码生成了属性文件。

错误:

java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:454)
    at java.lang.Integer.parseInt(Integer.java:527)
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26)
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58)
    at java.lang.Thread.run(Thread.java:745)
Exception in thread "Thread-3" java.lang.NullPointerException
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:82)
    at java.lang.Thread.run(Thread.java:745)
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:454)
    at java.lang.Integer.parseInt(Integer.java:527)
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26)
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58)
    at java.lang.Thread.run(Thread.java:745)
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:454)
    at java.lang.Integer.parseInt(Integer.java:527)
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26)
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58)
    at java.lang.Thread.run(Thread.java:745)
java.lang.NumberFormatException: null
    at java.lang.Integer.parseInt(Integer.java:454)
    at java.lang.Integer.parseInt(Integer.java:527)
    at ch.ethz.rama.asl.client.ClientInstance.<init>(ClientInstance.java:26)
    at ch.ethz.rama.asl.tests.ClientThreadInstance.run(ClientThreadInstance.java:58)

clientinstance的第26行是:

this.buffersize = Integer.parseInt(p.getProperty("Clientmessagesize"));

和其他类的第58行是:

client = new ClientInstance(client_id);

所以属性文件是问题,不知何故我弄乱了属性文件的生成。

2 个答案:

答案 0 :(得分:0)

显然,您要查找的属性根本不在文件中,因此Properties.getProperty()返回null,因此String.trim()获取NPE。

查看堆栈跟踪:哪些应该包含在您的问题中。并查看您的房产名称。

编辑现在您已经最终披露实际问题是NumberFormatException,这只能表示属性值不是数字。

但我已经受够了。

答案 1 :(得分:0)

问题在于上面发布的python脚本从配置文件中获取了变量,并将它们都变成了小例子,正如您在上面看到的名称'Servername'变为servername一样,让我不知所措代码让我看不到明显的,现在我不知道为什么我写的脚本做了那个,但我不是python专家,我现在只做了我所有的变量小案例!

感谢所有试图提供帮助的人。