我正在创建要ping的IP地址列表,用户可以在其中添加到列表中,然后以site.name1 = ... site.name2 = ...的形式保存到属性文件中。

目前,我有一个固定数量的for循环,是否有一种方法可以获取属性文件中的条目数,因此我可以在for循环中设置它而不是等待异常?

 PropertiesConfiguration config = configs.properties(new File("IPs.properties"));
            //initially check for how many values there are - set to max increments for loop
            for (int i = 0; i < 3; i++) { //todo fix
                siteName = config.getString("site.name" + i);
                siteAddress = config.getString("site.address" + i);
                SiteList.add(i, siteName);
                IPList.add(i, siteAddress);
            }


我浏览了文档和其他问题,但它们似乎无关。

最佳答案

根据文档,在我看来,您应该可以使用PropertiesConfiguration#getLayout#getKeys以字符串的形式获取所有键的集合。

我不得不稍微修改一下代码以使用apache-commons-configuration-1.10

        PropertiesConfiguration config = new PropertiesConfiguration("ips.properties");

        PropertiesConfigurationLayout layout = config.getLayout();

        String siteName = null;

        String siteAddress = null;

        for (String key : layout.getKeys()) {
            String value = config.getString(key);

            if (value == null) {
                throw new IllegalStateException(String.format("No value found for key: %s", key));
            }
            if (key.equals("site.name")) {
                siteName = value;
            } else if (key.equals("site.address")) {
                siteAddress = value;
            } else {
                throw new IllegalStateException(String.format("Unsupported key: %s", key));
            }
        }
        System.out.println(String.format("name=%s, address=%s", siteName, siteAddress));

10-08 17:29