General, Tech

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 =~ /([^=]*)=(.*)/
end
end

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

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

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

end

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

  1. 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 🙂

    Thanks!

  2. 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. 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. 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
    File.open(filename).
    select { |line| not line=~/^[ \t]*(#.+)*$/ }. # ignore comments and blank lines
    each { |line|
    (k,v) = line.chomp.split(‘=’,2)
    @props[k] = v
    }
    end
    end

    def []=(k,v)
    @props[k]=v
    end

    def [](k)
    @props[k]
    end

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

    p = Props.new(‘test.properties’)
    puts p[‘first’]
    puts p.to_s

    # cheers

  5. 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. 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. 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. 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
    File.open(filename).readlines.each do |line|
    line.match(/\s*([a-zA-Z\._]+)\s*=\s*(.*)/) do |matchdata|
    @props[matchdata[1]] = matchdata[2]
    end
    end
    end
    end

    def []=(k, v)
    @props[k]=v
    end

    def [](k)
    @props[k]
    end

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

Leave a reply to crossfit houston locations Cancel reply