class IOStreams::Zip::Reader

Public Class Methods

file(file_name, entry_file_name: nil) { |to_io| ... } click to toggle source

Java has built-in support for Zip files

# File lib/io_streams/zip/reader.rb, line 22
def self.file(file_name, entry_file_name: nil)
  fin = Java::JavaIo::FileInputStream.new(file_name)
  zin = Java::JavaUtilZip::ZipInputStream.new(fin)

  get_entry(zin, entry_file_name) ||
    raise(Java::JavaUtilZip::ZipException, "File #{entry_file_name} not found within zip file.")

  yield(zin.to_io)
ensure
  zin&.close
  fin&.close
end
get_entry(zin, entry_file_name) click to toggle source
# File lib/io_streams/zip/reader.rb, line 35
def self.get_entry(zin, entry_file_name)
  if entry_file_name.nil?
    zin.get_next_entry
    return true
  end

  while (entry = zin.get_next_entry)
    return true if entry.name == entry_file_name
  end
  false
end