使用Java识别*.properties文件中的键=值对

使用Java识别*.properties文件中的键=值对,java,Java,在我的项目中,我们有许多*.properties文件,在每个文件中,我们都有大量的key=value对 任务是查找所有以_格式开头的键_ 后跟任何单词,我们可以自由地假设该单词不包含任何特殊字符或空格字符,并且该键的值不等于空,不区分大小写 举个例子: _format_Date1=null _format_Date2=null _format_endTerm=null _isUpdatable_somethingA=false _isUpdatable_somethingB=false _for

在我的项目中,我们有许多*.properties文件,在每个文件中,我们都有大量的key=value对

任务是查找所有以_格式开头的键_ 后跟任何单词,我们可以自由地假设该单词不包含任何特殊字符或空格字符,并且该键的值不等于空,不区分大小写

举个例子:

_format_Date1=null
_format_Date2=null
_format_endTerm=null
_isUpdatable_somethingA=false
_isUpdatable_somethingB=false
_format_begingTerm=null
_format_countOfMoney=\#0.00#\ -- The kind of row that must be identified with the pattern
_javaType_name1=String
_javaType_name2=String
我们还可以假设所有的key=values对都将加载到一个集合中并逐行读取


如果您有任何帮助,我们将不胜感激……

只需对文件进行迭代、读取并逐行过滤即可

我想这样的事情可以做到:

    Files.walk(Paths.get("path"))
         .filter(Files::isRegularFile)
         .filter(path -> path.endsWith(".properties"))
         .forEach(path -> {
                      try {
                          Files.lines(path)
                               .filter(s -> s.startsWith("_format_"))
                               .filter(s -> !s.split("=")[1].toLowerCase().equals("null"))
                               .forEach(s -> System.out.println("File " + path.toString() + " has amtching line " + s));
                      } catch (final IOException e) {
                          e.printStackTrace();
                      }
                  }
         );

将.properties文件加载到属性对象中。然后迭代它的键,如果该键包含word格式,则返回该键的值。接受您的建议。谢谢。你应该使用Properties classI。我看不出使用Properties类有什么好处。你能告诉我为什么比较好吗?我最终采纳了你的两个建议。另外,请注意,我最终使用了Properties类,因为它清楚地说明了我在做什么,并且使用起来很简单。我不能说它是否有任何性能和/或内存优势。此外,我使用NIO文件来高效地读取中的文件,但在我使用PathMatcher类之前,查找路径结尾的过滤器对我不起作用。