Java 如何验证属性/自定义配置文件?

Java 如何验证属性/自定义配置文件?,java,ant,configuration,properties,directory,Java,Ant,Configuration,Properties,Directory,我的应用程序有许多属性/文本配置文件。有没有一种通用的方法来验证这些类型的文件?可能是一些工具或类似xsd的东西? 文件很大(超过1000行),所以我经常出错。大多数情况下,文件中的信息是指向不同目录的路径。因此,如果它们存在并保持一致,那将是一件好事。例如。 如果我有 mydata.root="c:\data" 在我完成之后: myreports=${mydata.root}/reports 如果检查c:\data和c:\data\report是否存在,这将是一个很好的选择 并且没有写(向

我的应用程序有许多属性/文本配置文件。有没有一种通用的方法来验证这些类型的文件?可能是一些工具或类似xsd的东西? 文件很大(超过1000行),所以我经常出错。大多数情况下,文件中的信息是指向不同目录的路径。因此,如果它们存在并保持一致,那将是一件好事。例如。 如果我有

mydata.root="c:\data"
在我完成之后:

myreports=${mydata.root}/reports
如果检查c:\data和c:\data\report是否存在,这将是一个很好的选择

并且没有写(向下几百行)例如


您可以在构建文件中执行此验证

例如,以下生成文件定义了一个
验证文件属性
,该属性验证指定的属性是否已定义,以及该属性是否作为文件或目录存在于文件系统中

<project default="init">

  <property file="test.properties"/>

  <target name="init">
    <validate-file-property property="program.files" type="dir"/>
    <validate-file-property property="mydata.root" type="dir"/>
    <validate-file-property property="foo"/>
  </target>

  <macrodef name="validate-file-property">
    <attribute name="property"/>
    <attribute name="type" default="file"/>
    <sequential>
      <fail unless="@{property}" message="The property '@{property}' is undefinded."/>
      <available file="${@{property}}" property="@{property}.exists" type="@{type}"/>
      <fail unless="@{property}.exists" message="The @{type} '@{property}' with value '${@{property}}' does not exist."/>
    </sequential>
  </macrodef>

</project>

您可以将输出粘贴到构建文件中。

我曾经提供过一项奖励,以获取有关提供模式验证的XML以外的配置语言的信息。不幸的是,这样的配置语言很少


这是一个丰富的问题的答案,以防你想看到答案的稀疏性。

这个
${}
东西只在Ant过程中起作用;也就是说,如果它在Ant进程之外,那么它不能从简单的
.properties
文件中工作。使用Java
Properties
class的
load()
方法将无法工作。无论如何,您可以检查Ant进程中是否存在文件/文件夹,如下所示
<project default="init">

  <property file="test.properties"/>

  <target name="init">
    <validate-file-property property="program.files" type="dir"/>
    <validate-file-property property="mydata.root" type="dir"/>
    <validate-file-property property="foo"/>
  </target>

  <macrodef name="validate-file-property">
    <attribute name="property"/>
    <attribute name="type" default="file"/>
    <sequential>
      <fail unless="@{property}" message="The property '@{property}' is undefinded."/>
      <available file="${@{property}}" property="@{property}.exists" type="@{type}"/>
      <fail unless="@{property}.exists" message="The @{type} '@{property}' with value '${@{property}}' does not exist."/>
    </sequential>
  </macrodef>

</project>
awk -F= '/\.(file|dir)/{ printf "<validate-file-property property=\"%s\" type=\"%s\"/>\n", $1, gensub(/.*\.(file|dir)/, "\\1", "g", $1) }' *.properties