Reading and Writing Java Property Files With Ruby

Created a simple Class in ruby to help reading and writing property files

class JavaProps
attr :file, :properties

#Takes a file and loads the properties in that file
def initialize file
@file = file
@properties = {}
IO.foreach(file) do |line|
@properties[$1.strip] = $2 if line =~ /([^=]*)=(.*)\/\/(.*)/ || line =~ /([^=]*)=(.*)/

#Helpfull to string
def to_s
output = “File Name
#{@file} \n”
@properties.each {|key,value| output += ” #{key}= #{value} \n” }

#Write a property
def write_property (key,value)
@properties[key] = value

#Save the properties back to file
def save
file =,”w+”)
@properties.each {|key,value| file.puts “#{key}=#{value}\n” }


13 thoughts on “Reading and Writing Java Property Files With Ruby

  1. Tiago Romero Garcia

    Hi! I am using your class in a project, and I would like to post it in my blog. I will put a link to here. Would you approve this? I hope to do so 🙂


  2. Flug USA

    Good work
    As a java developper , I keep my eye on other languages that can play a role in java-based systems, among them ruby.That’s why I’m really interested in learning Ruby. I found your code really helpful .
    I’m expecting more useful RUBY tips from you for java developpers

  3. Tammo

    I improved the regular expression a little. And now it uses # for comments, which is the normal way in properties files.

    properties[$1.strip] = $2.strip if line =~ /([^=#]+)=([^=#]+)/

  4. Ben Hardy (@benhardy)

    a little improvement would be to alter your reader/writer methods to have array-like syntax:

    class Props
    def initialize(filename = nil)
    @props = {}
    if (filename) then
    select { |line| not line=~/^[ \t]*(#.+)*$/ }. # ignore comments and blank lines
    each { |line|
    (k,v) = line.chomp.split(‘=’,2)
    @props[k] = v

    def []=(k,v)

    def [](k)

    def to_s{ |k,v| “#{k}=#{v}”}.join(“\n”)

    p =‘’)
    puts p[‘first’]
    puts p.to_s

    # cheers

  5. mortgage questions

    Thanks for some other informative web site. The place else
    may just I am getting that kind of info written in such an ideal manner?

    I have a project that I am just now running on, and I have
    been on the glance out for such information.

  6. crossfit houston locations

    Its such as you read my mind! You seem to know a lot approximately this, such
    as you wrote the ebook in it or something. I feel
    that you just could do with a few p.c. to pressure the message house a bit, however instead
    of that, this is great blog. An excellent read.

    I will definitely be back.

  7. robot art

    What’s Going down i am new to this, I stumbled upon this I have discovered
    It positively helpful and it has helped me out loads.
    I am hoping to give a contribution & assist other users like its aided me.
    Good job.

  8. bernhard

    This is my version; i think it is easier to understand and to maintain. In particular it uses the regular expression as a filter and as a parser.

    class Props
    def initialize(filename = nil)
    @props = {}
    if (filename) then do |line|
    line.match(/\s*([a-zA-Z\._]+)\s*=\s*(.*)/) do |matchdata|
    @props[matchdata[1]] = matchdata[2]

    def []=(k, v)

    def [](k)

    def to_s { |k, v| “#{k}=#{v}” }.join( “\n”)

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s