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

Java 解析属性文件中的数值时出现NumberFormatException?,java,properties-file,numberformatexception,Java,Properties File,Numberformatexception,我试图从属性文件中获取Java程序中的值,该文件是在服务器机器上使用python脚本编写的 该程序在本地运行良好,但在服务器上,当我尝试将属性文件中的整数值转换为程序的变量时,会出现空指针异常,例如: 我有: 正如我前面提到的,这只会在服务器上引起问题,但在本地主机上,它可以正常工作。 这也发生在我的客户机和中间件机器上。 两者都有相同的错误,在从文件检索属性值时停止。 但在本地主机上,我手动编写属性文件,在服务器上,它是使用此脚本生成的 我编写属性文件的方式是在一个配置文件中,该配置文件包含这

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

该程序在本地运行良好,但在服务器上,当我尝试将属性文件中的整数值转换为程序的变量时,会出现空指针异常,例如:

我有:

正如我前面提到的,这只会在服务器上引起问题,但在本地主机上,它可以正常工作。 这也发生在我的客户机和中间件机器上。 两者都有相同的错误,在从文件检索属性值时停止。 但在本地主机上,我手动编写属性文件,在服务器上,它是使用此脚本生成的

我编写属性文件的方式是在一个配置文件中,该配置文件包含这些值,我的脚本从中获取值,并将它们写入属性文件,以便在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)
另一类的第58行是:

client = new ClientInstance(client_id);

因此,属性文件是问题所在,不知何故,我搞乱了属性文件的生成。

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

看看堆栈跟踪:它应该包含在您的问题中。并检查您的财产名称

编辑现在您终于披露了实际问题是NumberFormatException,这只能意味着属性值不是数字


但是我已经受够了。

问题是上面发布的python脚本从配置文件中提取了变量,并将它们全部简化为小写,正如您可以看到的,上面的名称“Servername”变成了Servername,这段代码让我头晕目眩,让我看不到显而易见的东西,现在我不知道我编写的脚本为什么会这样做,但我不是python专家,我现在只是做了所有变量的小案例


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

调试它,检查p是否为空,然后检查p.getPropertydb_端口是否为空,如果p.getPropertydb_端口为空,代码将抛出NPE。您是如何加载属性的?您是否在python脚本创建属性文件后对其进行了chmod,以便java程序能够正确读取它?@BOND我没有对其进行chmod,为什么我必须这样做,以及如何进行?@LoveMeow,因为您需要确保java程序具有访问属性文件的正确权限。只需使用linux命令:chmod 755 filename.properties。755是生产系统中常用的文件访问模式。请尝试使用p.getproperty而不是p.getPropertyproperty,看看这是否有区别……我想是因为单词后面的空格?我将很快发布错误文件。@LoveMeow什么空间?什么词之后?你还应该在你的问题中发布属性文件本身。我已经发布了属性文件。@LoveMeow我同意:清除空间。请注意,您在原始问题中发布的内容根本不真实。你根本没有db_port=34。这是我发布的一个例子,我有2-3个属性文件有同样的问题。
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)
this.buffersize = Integer.parseInt(p.getProperty("Clientmessagesize"));
client = new ClientInstance(client_id);