【问题标题】:String hostname from properties file: Java属性文件中的字符串主机名:Java
【发布时间】:2014-06-27 09:50:31
【问题描述】:

这听起来像是一个非常简单的问题,但我想不出办法解决这个问题。

我有一个 config.properties 文件,其中包含两个键值:IP 地址和端口号。我阅读了这个配置文件以提取字符串格式的键值。但是,当我尝试使用这些值时,我无法连接到从配置文件中检索到的 IP 地址。

原因是读取的值是字符串格式,我需要在使用它们之前将它们转换为正确的格式。我想要的是存储在配置文件中的值“192.168.1.40”被转换为String host 格式。我尝试使用 InetAddress 但这给出了错误。 配置文件的内容是:

IP=192.168.1.40
PORT=9124

使用这些值的代码如下:

Properties prop = new Properties();
String propFileName = "...//testJedis//resources//config.properties";        
prop.load(new FileInputStream(propFileName));//testJedis/resources/config.properties"));// configStream);

Jedis jedis=new Jedis(prop.getProperty("IP"),Integer.parseInt(prop.getProperty("PORT")));
//Jedis jedis = new Jedis("192.168.1.40",9124);

我得到的错误堆栈如下:

Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.UnknownHostException: "192.168.1.40"
at redis.clients.jedis.Connection.connect(Connection.java:150)
at redis.clients.jedis.BinaryClient.connect(BinaryClient.java:71)
at redis.clients.jedis.Connection.sendCommand(Connection.java:92)
at redis.clients.jedis.BinaryClient.ping(BinaryClient.java:84)
at redis.clients.jedis.BinaryJedis.ping(BinaryJedis.java:65)
at TestJedis.main(TestJedis.java:43)
Caused by: java.net.UnknownHostException: "192.168.1.40"
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at redis.clients.jedis.Connection.connect(Connection.java:144)
... 5 more

jedis类的文档可以找到here

P.S.:如果我直接将主机地址作为字符串传递,它可以正常工作(这意味着主机完全可以访问)。

【问题讨论】:

  • 您能否将读取的两个属性(字符串和 int)存储在单独的变量中,并将它们记录在屏幕上以便确定?
  • 任何空白字符潜入某处?
  • 堆栈说你有一个 UnknownHostException;它试图连接到该 IP。你能在没有道具的情况下连接吗?文件?
  • 使用prop.getProperty("IP").trim() 并尝试。
  • 您可以尝试在记事本中使用您的条目创建一个新文件吗?可能是一些字符编码导致问题。

标签: java string config host jedis


【解决方案1】:
java.net.UnknownHostException: "192.168.1.40"
                               ^            ^

恕我直言这个双引号不应该存在,因为这个ExceptionString 作为未知的主机名参数。 这个Exception 的唯一原因可能是您实际上在hostName 中传递了双引号。

应该是java.net.UnknownHostException: 192.168.12<--If host is unknown

来自评论

当我打印它们时,IP 返回为“192.168.1.40”(包括引号) 在屏幕上

这仅仅意味着你的String IP="\"192.168.1.40\"" 不是String IP="192.168.1.40" 从配置文件中删除双引号。

我无法重现该问题,但您可以使用 replace

String ip=prop.getProperty("IP").replace("\"","")

【讨论】:

  • 问题中提到了配置文件的内容。我没有添加任何引号,我仍然面临阅读问题。
  • 是的,这正是问题所在。即使我没有在配置文件中添加任何引号,我也无法将值读取为“只是一个字符串”。
  • PORT 也会发生这种情况吗?
  • 不,PORT 读起来绝对没问题。问题是当我使用“。”时。在值字段中,格式正在发生变化。如果我使用 prop.setProperty("IP","192.168.1.40") 设置属性,则程序可以正常工作。我想使用“。”有一些问题。在价值上。我尝试使用 \ 来逃避含义,但没有帮助。
猜你喜欢
  • 2015-05-30
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2014-06-23
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多