当前位置:首页 > 开发 > 编程语言 > Ruby > 正文

ruby学习之IO(一)

发表于: 2010-06-05   作者:酷的飞上天空   来源:转载   浏览:
摘要:  文件与目录的操作 ruby中文件和目录的操作基本上是基于File和Dir类的操作 创建一个File类的实例方式为 file = File.new("d:/text.txt") file = File.open("d:/text.txt","w")   File常用的实例方法有: atime :返回文件

 文件与目录的操作

ruby中文件和目录的操作基本上是基于File和Dir类的操作

创建一个File类的实例方式为

file = File.new("d:/text.txt") 
file = File.open("d:/text.txt","w")

 

File常用的实例方法有:

atime :返回文件的最后访问时间,一个Time对象

stat : 返回文件的状态信息对象,为FIle::Stat的实例,通过这个对象可以获得文件的创建修改时间以及大小等信息

mtime:返回文件的最后修改时间

path:返回文件的完整路径

each(separator="\n"){|line| block} :以separator参数分割读取文件,缺省按照行来分割,每次将文件的一行内容传入代码块执行

each_byte{|byte| block}:对文件的每个字节进行迭代执行

each_line{|line| block}:对文件的每行进行迭代执行

eof :如果读取到文件的末尾则返回true,否则返回false

gets :读取并返回文件的下一行

puts(obj)/print(ojb)/write(string) :写入内容至文件

lineno/lineno=:返回或设这当前的行号

pos/pos=:返回或设置当前读取的字节偏移量

File常用的类方法有

delete(filename) :删除文件

directory?(path) :是否是目录

exist?(filename) :文件后目录是否存在

expand_path(filename) :转换为绝对路径

file?(filename):是否为普通文件

rename(oldname,newname):重命名

size(filename):返回给定文件的字节大小

使用例子:

file_path = "d:/text.txt"
if File.exist?(file_path)
  puts "文件已找到!"
  file = File.new(file_path, "r")
  puts "源文件大小为:#{File.size(file_path)},创建时间为:#{file.ctime},最后访问时间为:#{file.atime}"
else
  puts "文件不存在,创建新文件#{file_path}"
end
puts "写入文件内容..."


File.open(file_path, "a+") do |file|
  #写入当前的时间
  file.puts "新的一行"+Time.now.strftime("%Y-%m-%d %H:%M:%S")
end

puts "输出文件内容====="
File.open(file_path, "r")do |file|
  #对每行进行迭代操作
  file.each_line do |line|
    puts "行号"+file.lineno.to_s+":"+line
  end
end

 

Dir类常用的类方法如下

chdir(filename):改变进程当前的工作目录,参数可以为使用相对路径

getwd/pwd :返回当前的工作目录

delete(dirname)/rmdir(dirname):删除给定的目录,如果目录不为空则引发异常

entries(dirname):返回给定目录中所有文件名组成的数组

foreach(dirname):对给定目录中的每一项进行迭代

mkdir(dirname):创建目录

glod(glod_pattern):使用模式glod_pattern在当前目录中查找匹配的子目录或文件,以数组的形式返回 Dir的方法[]等于调用glod例如Dir.glod("*.rb") 和Dir["*.rb"] 为返回所有后缀是rb的文件

 

例子:

dirpath = "d:/test"
testdirpath = "d:/test/testdir"
Dir.delete(testdirpath) if File.exist?(testdirpath)
puts "建立目录#{testdirpath}"
#建立目录
Dir.mkdir(testdirpath)

#更改工作目录为dirpath表示的目录,如果路径中含有中文字符,则会报找不到目录的错误
Dir.chdir(dirpath) do |path|
  puts "当前目录为#{Dir.pwd},下面的文件和目录为:"
  #输出目录下的子文件和子目录,如含有中文则以乱码显示(中文显示为方块)
  Dir["**/**"].each { |item| puts item }
end

puts "当前目录为:#{Dir.pwd},下面的文件和目录为:"
#使用Dir的foreach方法
Dir.foreach(Dir.pwd) do |dir|
  puts dir
end

=begin
输出如下:
建立目录d:/test/testdir
当前目录为d:/test,下面的文件和目录为:
test.txt
test.xml
testdir
当前目录为:D:/myruby/study/RubyStudy/lib,下面的文件和目录为:
.
..
main.rb
=end

 

操作xml   

简单xml操作,生成xml片段

require "rexml/document"
doc = REXML::Document.new
root_element = doc.add_element("persons",{"nameType"=>"String","ageType"=>"int"})
element1 = root_element.add_element("person",{"name"=>"张三","age"=>20})
element2 = root_element.add_element("person",{"name"=>"李四","age"=>22})
element1.add_text "家住在火星"
element2.add_text "家住在水星"

#puts root_element.to_s
#写入到文件
File.open("d:/test/rubytest.xml", "w+") { |file| file.write(root_element.to_s)  }

#读取文件
rdoc = REXML::Document.new File.new("d:/test/rubytest.xml")

rdoc.root.each_element do |e|
  puts e.attributes["name"]
  puts e.attributes["age"]
  puts e.text
end

 

输出:

张三
20
家住在火星
李四
22
家住在水星

 

 

ruby学习之IO(一)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
在使用ruby脚本时, 经常需要用到在参数中给出文件名,然后再脚本中可以处理该文件的功能,或者说从S
在使用ruby脚本时, 经常需要用到在参数中给出文件名,然后再脚本中可以处理该文件的功能,或者说从S
Ruby 学习笔记 参考书--why’s (poignant) guide to ruby 下载地址:CSDN资源 ruby中的数据类型和其
最近结合例子学习(PCL)点云库的技术文档,今天开始把学习的过程记录下来,稍后会把PCL环境搭建的
创建一个rails程序 rails KnoledgeStation cd KnoledgeStation 进入网站文件夹 ruby script/server
转载自:http://88889999.iteye.com/blog/1617423 因近段时间项目频繁使用了IO流,之前我没有系统的
文件相关 package com.bjsxt.io.file; import java.io.File; /** * 两个常量 * 1、路径分隔符 ; * 2
IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库
IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库
java新IO之IntBuffer 1 : put方法,position方法,limit方法,capacity方法 public abstract IntBu
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号