【问题标题】:java.util.Properties multiple values ArrayIndexOutOfBoundsExceptionjava.util.Properties 多个值 ArrayIndexOutOfBoundsException
【发布时间】:2012-11-16 10:55:30
【问题描述】:

我有一个存储服务器名称和端口的属性文件。这些值将在Enum 中使用,以便能够在不接触代码的情况下更改值。

属性的内容如下所示:

PROD=FTPROD01:1122

问题是我必须拆分服务器和端口号,因为我使用这些值作为方法的参数:

server = properties.getProperty(this.name(), "").split(":")[0];
try {
port = Integer.valueOf(properties.getProperty(this.name(), "").split(":")[1]);
} catch (ArrayIndexOutOfBoundsException e) {
System.err.println("error");
}

如您所见,我正在捕获ArrayIndexOutOfBoundsException,这是一个运行时异常,以检测是否缺少第二个值,因为如果属性文件“损坏”,程序将崩溃。

这是获取多个值的好方法,还是有其他更优雅的方法?

【问题讨论】:

    标签: java arrays exception properties


    【解决方案1】:

    这是获取多个值的好方法,还是有其他更优雅的方法?

    当然 - 不要尝试访问无效长度的数组 - 在你做任何其他事情之前检测它。

    String[] bits = properties.getProperty(this.name(), "").split(":");
    if (bits.length == 2) {
      server = bits[0];
      port = Integer.valueOf(bits[1]); 
    } else {
      // Log the corruption or whatever...
    }
    

    请注意,如果valueOf 抛出NumberFormatException,这仍然会失败。

    基本上,您应该避免捕获可以避免引发的异常。

    【讨论】:

      【解决方案2】:

      经验法则:不要将异常用于正常流程。

      您可以使用数组length 来查找port 是否存在,如下:

      String[] arr = String.valueOf(properties.getProperty(this.name(), "").split(":");
      
      server = arr[0];
      if(arr.length > 1)
      {
          port = Integer.valueOf(arr[1]);
      }
      

      【讨论】:

        【解决方案3】:

        当然,如果它适合你,这是一个不错的选择 :-)

        不过,当有人给你一个看起来像这样的属性文件时,你会怎么做:

        PROD=
        

        提示:扩展 try/catch 并可能在 PROD 丢失时准备一个默认值 :-)

        干杯,

        【讨论】:

          【解决方案4】:

          您可以在此之前进行检查以确保属性值
          if(properties.getProperty(this.name(), "").split(":").length > 1)
          通过这种方式,你可以去掉你的异常处理代码:)

          【讨论】:

            【解决方案5】:

            只是拥有像

            这样的属性
            PROD.SERVER=FTPROD01
            PROD.PORT=1122
            

            属性主要用于键和值。

            【讨论】:

              猜你喜欢
              • 2010-11-28
              • 1970-01-01
              • 2016-04-15
              • 1970-01-01
              • 1970-01-01
              • 2011-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-29
              相关资源
              最近更新 更多