【问题标题】:Java .properties file equivalent for Ruby?Java .properties 文件等效于 Ruby?
【发布时间】:2008-09-19 00:36:12
【问题描述】:

我需要将一些简单的属性存储在一个文件中并从 Ruby 中访问它们。

我非常喜欢 Java 中此类事物的标准 .properties 文件格式(使用 java.util.Properties 类)...它简单、易于使用且易于阅读。

那么,是否有一个 Ruby 类可以让我轻松地从这样的文件中加载一些键值对?

我不想使用 XML,所以请不要建议使用 REXML(我的目的不保证“尖括号税”)。

我已经考虑推出我自己的解决方案......它可能需要大约 5-10 行代码,但我仍然宁愿使用现有的库(如果它本质上是从文件构建的哈希)......因为这会将它降低到 1 行....


更新:它实际上是一个直接的 Ruby 应用程序,而不是 rails,但我认为 YAML 会做得很好(它在我的脑海中,但我忘记了它......见过但从未使用过) ,谢谢大家!

【问题讨论】:

    标签: ruby file-io


    【解决方案1】:

    这是用于 Rails 应用程序还是 Ruby 应用程序?

    真的,您可以将您的属性粘贴到 yaml 文件中,然后 YAML::Load(File.open("file")) 它。


    来自 Mike Stone 的说明:实际上这样做会更好:

    File.open("file") { |yf| YAML::load(yf) }
    

    YAML.load_file("file")
    

    正如 ruby​​ 文档所建议的那样,否则文件在垃圾收集之前不会关闭,但无论如何都是好的建议 :-)

    【讨论】:

    • 是的,这是一个问题,所以 cmets 看起来如此......不可见。我没想过要一口气做完,太棒了!
    【解决方案2】:

    另一种选择是简单地使用另一个 Ruby 文件作为您的配置文件。

    例如,创建一个名为 'options' 的文件

    {
        :blah   => 'blee',
        :foo    => 'bar',
        :items  => ['item1', 'item2'],
        :stuff  => true
    }
    

    然后在您的 Ruby 代码中执行以下操作:

    ops = eval(File.open('options') {|f| f.read })
    puts ops[:foo]
    

    【讨论】:

    • 这个选项不提供滥用的可能性吗? eval 将执行任意 Ruby 代码,例如,可以对文件系统做一些讨厌的事情。
    • 滥用如果您正在评估来自不受信任的来源(例如 Web 表单)的代码,则此答案适用于有关读取选项文件的问题。如果有人想修改它,他们也可以修改阅读它的 ruby​​ 代码......
    【解决方案3】:

    YAML 会像上面描述的那样完美地做到这一点。例如,在我的一个 Ruby 脚本中,我有一个 YAML 文件,例如:

    migration:
      customer: Example Customer
      test:     false
    sources:
    - name:     Use the Source
      engine:   Foo
    - name:     Sourcey
      engine:   Bar
    

    然后我在 Ruby 中将其用作:

    config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0]))
    puts config['migration']['customer']
    
    config['sources'].each do |source|
      puts source['name']
    end
    

    【讨论】:

      【解决方案4】:

      inifile - http://rubydoc.info/gems/inifile/2.0.2/frames 将支持基本的 .properties 文件以及带有 [SECTIONS] 的 .ini 文件,例如。

      [SECTION]
      key=value
      

      当您的数据结构复杂但可能包含空格、制表符、行尾等时,YAML 是很好的选择——如果文件不是由程序员维护,这可能会导致问题。相比之下,.properties.ini 文件更宽容,如果您不需要通过 YAML 获得的深层结构,则可能适合。

      【讨论】:

        【解决方案5】:

        Devender Gollapally 写了一个 class 来做到这一点:

        ...虽然我建议最好使用 YAML 文件。

        【讨论】:

          【解决方案6】:

          您可以考虑使用 YAML,而不是 .properties 样式的配置文件。 YAML 在 Ruby on Rails 中用于数据库配置,并在其他语言(Python、Java、Perl 等)中广受欢迎。

          Ruby YAML 模块的概述在这里:http://www.ruby-doc.org/core/classes/YAML.html

          YAML 的主页在这里:http://yaml.org

          【讨论】:

            猜你喜欢
            • 2011-01-11
            • 1970-01-01
            • 2016-11-09
            • 2010-10-03
            • 2018-06-29
            • 2023-04-03
            • 2023-03-04
            • 2011-04-05
            相关资源
            最近更新 更多