【问题标题】:Is there a Delphi library which reads and writes .properties files? [closed]是否有读写 .properties 文件的 Delphi 库? [关闭]
【发布时间】:2009-02-07 15:52:15
【问题描述】:

我考虑过创建自己的文件,但要使其 100% 与 Java .properties 文件兼容,需要考虑很多细节,所以我先问一下。

【问题讨论】:

    标签: delphi properties


    【解决方案1】:

    曾经有一个名为Gel 的Java IDE。它是用 Delphi 编写的,它是一个很好的 IDE,所以我希望它能够处理属性文件。作者已停止该项目的工作。在他的blog post describing the project's cancellation 中,他提到对使项目开源的前景持开放态度,但它从未真正起飞。如果你问得好,你可能会得到你正在寻找的那部分代码。

    对您发现的任何使用TStrings 作为其界面的解决方案持怀疑态度。尽管该类具有Names 和Values 属性,使其作为处理键/值对的类具有吸引力,但它与Java 的属性文件并不完全兼容。原因是 Java 允许“=”作为键名中的字符,TStrings 类通过查找字符串中的第一个“=”字符来检测名称的结尾和值的开头。此外,Java 属性文件可以使用“:”作为分隔符,甚至可以使用普通的空格。

    【讨论】:

    • Gel 使用 JNI 处理属性文件(即没有 Delphi 源)
    【解决方案2】:

    不是 Java 人,但据我所知 .properties 文件伪装成类似于 .INI 文件;它有 name=value 对,没有节名。您可以使用 Delphi 的 TStringList 来处理它;它具有 Names 和 Values 属性。

    例如,从 .properties 文件中读取以下行:

    MyProgramData=c:\documents and settings\DR\Application Data\MyApp
    

    我可以简单地使用:

    var
      SL: TStringList;
      MyDataPath: string;
    begin
      SL :=  TStringList.Create;
      try
        SL.LoadFromFile('myapp.properties');
        MyDataPath := SL.Values['MyProgramData'];
      finally
        SL.Free;
      end;
      // Do something with MyDataPath
    end;
    

    对于过于迂腐的读者,我并不是建议 TStringList 允许您使用 .properties 文件的全部功能;但是,可能足以满足您的需要。 (正如我所说,我不是 Java 人。)

    【讨论】:

    • 那不是一个有效的 .properties 文件。反斜杠是特殊的。阅读 java.util.Properties.load() 函数的文档。等号可以是键名的一部分,但 INI 不支持。行可以用反斜杠继续。
    • 嗯,罗伯?我没有在任何地方说这是一个有效的 .properties 文件,是吗?
    • 不,我想你从来没有说过你的例子是有效的。但是为什么要给出无效的例子呢?在 Java 中,MyProgramData 的值为“c:documents and settingsDRApplication DataMyApp”。 DR 对 100% 的兼容性很感兴趣,所以没有反斜杠支持的东西对我没有帮助。
    • 你说得对。我确实错过了 OP 的“100% 兼容”部分。我的错。 :-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2012-03-30
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多