Sha256: 55427975d56e6fddec2e934d9c819403813f2555566afb3b4403742759649d9c

Contents?: true

Size: 1.19 KB

Versions: 41

Compression:

Stored size: 1.19 KB

Contents

require 'rjb'

if Rjb::VERSION < '1.3.4'
  $stderr.puts "require rjb-1.3.4 or later, bye."
  exit 1
end

class ZipFile
  include Enumerable
  Zip = Rjb::import('java.util.zip.ZipFile')
  def initialize(file, &block)
    @zipfile = Zip.new(file)
    if block
      yield self
      @zipfile.close
    end
  end
  def close
    @zipfile.close
  end
  def each(&block)
    unless block
      Enumerator.new(self)
    else
      e = @zipfile.entries
      while e.has_more_elements
        yield e.next_element
      end
    end
  end
  def size
    @zipfile.size
  end
  def unzip(ent)
    if String === ent
      ent = @zipfile.entry(ent)
    end
    is = @zipfile.input_stream(ent)
    buff = "\0" * 4096
    File.open(ent.name, 'wb') do |fout|
      loop do
        len = is.read(buff, 0, buff.size)
        break if len < 0
        fout.write(buff[0, len])
      end
      is.close
    end
  end
end

if __FILE__ == $0
  if ARGV.size == 0
    puts 'usage: ruby unzip.rb filename'
  else
    ARGV.each do |file|
      ZipFile.new(file) do |zip|
        zip.each do |f|
          puts "#{f.name}, #{f.size}"
          unless f.directory?
            zip.unzip(f)
          end
        end
      end
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
rjb-1.7.3 samples/unzip.rb
rjb-1.7.1 samples/unzip.rb
rjb-1.7.0 samples/unzip.rb
rjb-1.6.9 samples/unzip.rb
rjb-1.6.8 samples/unzip.rb
rjb-1.6.7 samples/unzip.rb
rjb-1.6.6 samples/unzip.rb
rjb-1.6.5 samples/unzip.rb
rjb-1.6.4 samples/unzip.rb
rjb-1.6.3 samples/unzip.rb
rjb-1.6.2 samples/unzip.rb
rjb-1.6.1 samples/unzip.rb
rjb-1.6.0 samples/unzip.rb
rjb-1.5.9 samples/unzip.rb
rjb-1.5.8 samples/unzip.rb
rjb-1.5.7 samples/unzip.rb
rjb-1.5.6 samples/unzip.rb
rjb-1.5.5 samples/unzip.rb
rjb-1.5.4 samples/unzip.rb
rjb-1.5.3 samples/unzip.rb