`
酷的飞上天空
  • 浏览: 521762 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

ruby学习之IO(二)

阅读更多

zip文件的压缩与解压缩

使用了扩展库rubyzip实现

安装:gem install rubyzip

 

文件的压缩步骤为:使用zipfile的open方法打开zip文件,调用add方法添加文件到压缩文件

解压缩步骤为:打开zip文件,掉用zipfile的each方法,然后利用迭代传进来的zipentry对象调用extract方法

 

代码如下

压缩文件

require 'zip/zip'
class ZipUtil
# 压缩文件方法
# zip_file_name 压缩文件绝对路径,含文件名
# file_path 要解压的目录或文件
def self.add_to_zip_file(zip_file_name,file_path)
  # start_path 表示
  def self.add_file(start_path,file_path,zip)
    # 如果文件是一个目录则递归调用此方法
    if File.directory?(file_path)
      # 建立目录
      # 如果省略下一行代码,则当目录为空时,此目录将不会显示在压缩文件中
      zip.mkdir(file_path)
      puts "建立目录#{file_path}"
      Dir.foreach(file_path) do |filename|
        #递归调用add_file方法
        add_file("#{start_path}/#{filename}","#{file_path}/#{filename}",zip) unless filename=="." or filename==".."
      end
    else
      # 给压缩文件中添加文件
      # start_path 被添加文件在压缩文件中显示的路径
      # file_path 被添加文件的源路径
      zip.add(start_path,file_path)
      puts "添加文件#{file_path}"
    end
  end

  # 如果文件已存在,则删除此文件
  if File.exist?(zip_file_name)
    puts "文件已存在,将会删除此文件并重新建立。"
    File.delete(zip_file_name)
  end

  # 取得要压缩的目录父路径,以及要压缩的目录名
  chdir,tardir = File.split(file_path)
  # 切换到要压缩的目录
  Dir.chdir(chdir) do
     # 创建压缩文件
     puts "开始创建压缩文件"
    Zip::ZipFile.open(zip_file_name,Zip::ZipFile::CREATE) do |zipfile|
      puts "文件创建成功,开始添加文件..."
      # 调用add_file方法,添加文件到压缩文件
      puts "已添加文件列表如下:"
      add_file(tardir,tardir,zipfile)
    end
  end
end
end

 

调用方法及输出如下:

# 参数1:压缩文件的全路径名,参数2:要压缩的目录名
ZipUtil.add_to_zip_file("d:/test.zip","d:/test")

output:
开始创建压缩文件
文件创建成功,开始添加文件...
已添加文件列表如下:
建立目录test
添加文件test/rubytest.xml
添加文件test/test.txt
添加文件test/test.xml
建立目录test/testdir

 

解压缩代码:

 

require 'zip/zip'
class ZipUtil
# 解压文件方法
# zif_file_path 压缩文件的访问路径
# extract_directory 解压文件的保存目录
def self.extract_from_zip_file(zif_file_path,extract_directory)

  unless File.exist?(zif_file_path)
    puts "文件:#{zif_file_path}不存在."
    return 0
  end
  Dir.mkdir(extract_directory) unless File.exist?(extract_directory)
  puts "解压文件开始,输出目录为#{extract_directory}."
  Zip::ZipFile.open(zif_file_path) do |zif_file|
    zif_file.each do |entry|
      # 通过下句打印可知,entyr是Zip::ZipEntry的对象
      # puts entry.class
      # 利用File.join构建文件存放的路径,路径为存放目录加上压缩文件的相对路径
      print "解压文件#{entry::name}......"
      entry.extract(File.join(extract_directory,entry::name))
      puts "OK"
    end
  end
  puts "解压文件完成!"
end
end

 

调用及输出如下:

# 解压缩文件
ZipUtil.extract_from_zip_file("d:/test.zip","d:/ext")

解压文件开始,输出目录为d:/ext.
解压文件test/......OK
解压文件test/rubytest.xml......OK
解压文件test/test.txt......OK
解压文件test/test.xml......OK
解压文件test/testdir/......OK
解压文件完成!

 

YAML的读取

在YAML中,层次结构通过缩进来表示,连续的项目通过减号‘-’表示,数组使用[],Hash使用{}

常用方法有

YAML.dump(objd) 将obj转化为YAML格式字符串

YAML.load(str) 解析YAML格式字符串,还原为ruby对象

YAML.load_file(filename) 直接读取YAML文件,还原ruby对象

例:

require 'yaml'
class YamlUtil
  #构造方法,传递进来YAML文件路径,保存文件对象
  def initialize(yaml_file_name)
    @yaml_file = File.new(yaml_file_name,"w+")
  end
  #把obj格式化为YAML字符串并增加进保存的YAML文件对象
  def add_obj_to_yaml_file(obj)
    YAML.dump(obj, @yaml_file)
  end
  #关闭文件
  def close_file
    @yaml_file.close
  end
  #类方法,打印所提供的YAML文件内容
  def self.print_yaml_file(yaml_file_name)
    #一个包含有YAML文件的内容的ruby对象,类型与保存时的类型相同
    yaml_data = YAML.load_file(yaml_file_name)
    #对数据进行遍历,此为一个数组对象
    yaml_data.each do |item|
      #打印其中的Hash的值
     puts "name:#{item[:name]},age:#{item[:age]}"
    end
  end
end

yaml_file = "d:/test.yaml"
yi = YamlUtil.new(yaml_file)
#构造Hash,并填充内容
obj = []
obj<<{:name=>"张三",:age=>"20"}
obj<<{:name=>"李四",:age=>"22"}
#将保存有Hash对象的数组,保存入YAML文件
yi.add_obj_to_yaml_file(obj)
#关闭文件
yi.close_file

#读取文件并输出文件的内容
YamlUtil.print_yaml_file(yaml_file)

 输出为:

name:张三,age:20
name:李四,age:22

 

 

 

分享到:
评论

相关推荐

    Ruby学习笔记

    这个暑假回家没事干闲...恩,废话就少提,下面我学习Ruby的各个部分。其中Ruby风格这一部分是开放的,因为我暂时还没有形成自己的风格。我用xmind来记笔记,因此我只是把笔记搬到博客上,看看下面的图。好有爱啊!!!

    Ruby 教程 The Book of Ruby

    本书面向希望学习Ruby语言的初学者以及已经有一定编程基础但想深入了解Ruby特性的开发者。 - **风格**:本书采用实战导向的方式进行讲解,旨在通过实践让读者掌握Ruby的核心概念和技术。 - **目标读者**:适合对Ruby...

    学习 Ruby 的笔记以及 Demo.zip

    在学习过程中,你将接触到控制结构(如if语句、循环)、类和对象的创建、模块的使用、异常处理、文件和IO操作等基础内容,也会了解到如何使用Gem(Ruby的包管理器)安装和管理外部库,以及如何调试和测试Ruby代码。...

    ruby 语言学习

    Ruby语言的学习包括了基础语法、类和对象、模块、方法、控制结构、变量和数据类型等多个方面。 一、基础语法 Ruby的基础语法简洁明了,易于理解。例如,变量分为局部变量(以小写字母或下划线开头)、实例变量(以@...

    ruby在unbuntu的安装版本

    Ruby是一种强大的、面向对象的脚本语言,尤其适合Web开发,如使用Rails框架。...通过以上步骤,你不仅了解了如何在Ubuntu上安装Ruby,还学习了RVM的基本用法,这将有助于你在未来的开发工作中灵活管理Ruby版本。

    ruby基础教程中文第四版

    《Ruby基础教程(中文第四版)》是深入学习Ruby语言的重要参考资料,由Ruby之父亲自审校并作序推荐,其权威性和准确性不言而喻。 该书涵盖了Ruby的基础知识,包括但不限于以下内容: 1. **变量和常量**:Ruby中的...

    ruby实用函数和实例

    Ruby是一种强大的、面向对象的脚本编程语言,以其简洁、优雅的语法和强大的功能而闻名。在Ruby中,有许多实用的内置函数和方法,这些...通过学习和实践,我们可以利用Ruby的这些工具来提升我们的开发效率和代码质量。

    ruby-1.8.7-p72-i386-mswin32.zip

    6. **lib**:这是Ruby的核心库和标准库所在的目录,包含了许多预定义的类和模块,如`Array`, `String`, `File`, `IO`等。开发者可以直接在他们的代码中导入和使用这些库。 7. **share**:这个目录可能包含一些共享...

    ruby介绍及相应的ruby demo示意源码,供大家参考学习

    Ruby是一种面向对象的、动态类型的...通过这些示例,我们可以深入理解Ruby语言的特性和常用操作,为今后的学习和开发打下坚实的基础。无论是初学者还是经验丰富的开发者,Ruby都能提供一个富有创新和乐趣的编程环境。

    Windows下RDT+Eclipse搭建 ruby开发环境配置

    安装完成后,打开Eclipse并选择Help &gt; Install New Software,输入RDT的更新站点(http://eclipse-rdt.github.io/update/),选择Ruby Development Tools并安装。 安装RDT后,我们需要配置Ruby Interpreter。在...

    Ruby编程,实用程序员指南Programming Ruby, The Pragmatic Programmer's Guide

    《Ruby编程,实用程序员指南》是一本针对Ruby语言的学习教程与参考手册,旨在为程序员提供一个全面、深入的Ruby语言学习资源。本书不仅适合初学者快速入门,也适合具有一定经验的开发者进阶学习。 ### 一、Ruby语言...

    ruby初学者教程(对初学者很有帮助)

    irb是一个命令行工具,可以让开发者直接在命令行中测试Ruby代码片段,非常适合学习和调试。 **2.4 使用ri(Ruby信息) ri是一个内置的帮助系统,可以帮助开发者查询Ruby文档和API。 **2.5 RubyGems** RubyGems是...

    ruby小程序

    Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法著称。在IT行业中,Ruby常用于...如果需要深入学习或开发Ruby小程序,建议阅读官方文档、参考书籍或者参加在线教程,以便系统地掌握Ruby语言及其应用。

    ruby中文文档

    通过查阅这个文档,你可以深入学习Ruby的各个部分,包括类的定义、模块的使用、异常处理、文件和目录操作,以及如何使用Ruby进行网络编程和数据库交互等。同时,文档可能还会包含示例代码和实践指导,以帮助你更好地...

    ruby中文教程,pdf格式,含.rb源代码

    9. **元编程**:Ruby的元编程能力是其独特之处,包括类和模块的动态修改、方法定义、类方法和实例方法的区别等。 10. **测试驱动开发(TDD)**:在Ruby中,测试是非常重要的一部分,学习如何使用Rspec或Test::Unit...

    ruby hacking guide 中文版教程

    5. **Ruby内核与标准库**:本书会揭示Ruby内核的一些秘密,比如对象模型、垃圾回收机制,以及标准库中的各种实用工具,如File、IO、Regexp等模块的使用。 6. **Ruby C API**:对于想要深入到Ruby底层的开发者,书中...

    ruby写的命令行操作文件系统(初学)

    在Ruby编程语言中,命令行操作文件系统是基础但至关重要的技能。...通过学习和实践这些基本操作,你可以更好地理解和掌握Ruby在命令行环境中管理文件系统的方法。不断地实践和探索,将使你在Ruby编程的道路上更进一步。

    Ruby语言入门教程(附源码文件)

    Ruby提供了方便的文件操作接口,如`File`类和`IO`类。可以进行文件的读写、追加、复制、删除等操作。 10. **Ruby on Rails框架** Ruby on Rails是基于Ruby的Web开发框架,遵循MVC(模型-视图-控制器)架构模式,...

    the ruby way

    通过学习《The Ruby Way》第二版,读者不仅可以掌握Ruby编程的基本技巧,还能了解到一些高级特性,从而在实践中发挥Ruby的最大潜力。无论是初学者还是有经验的开发者,这本书都能为他们提供宝贵的指导和启示。

    Ruby语言中文教程

    关于Ruby的文件和IO操作,它提供了丰富的API,可以方便地读写文件、处理流和进行网络通信。例如,`File`类提供了一系列用于文件操作的方法,`STDIN`, `STDOUT`, `STDERR`是标准输入、输出和错误流的预定义对象。 ...

Global site tag (gtag.js) - Google Analytics