Ruby扫盲之文件目录
本帖最后由 zuerrong 于 2011-01-26 16:35 编辑写文件,使用"w"标记进行open:
irb(main):001:0> open("a.txt","w") do |f|
irb(main):002:1* f.puts "hello"
irb(main):003:1> f.puts "world"
irb(main):004:1> end
读文件,使用"r"标记进行open(或者连"r"也省略):
irb(main):084:0> open("a.txt") do |s|
irb(main):085:1* s.each do |l| puts l end
irb(main):086:1> end
追加文件,使用"a"标记进行open:
irb(main):011:0> open("a.txt","a") do |f|
irb(main):012:1* f.puts "nice a girl"
irb(main):013:1> end
open实际是一个Kernel方法,它被File类继承了,所以File.open也可以。
File类自身有很多类方法,用的较多的包括:
File.basename("/path/a.txt")
得到一个文件的基本名。
File.dirname("/path/a.txt")
得到一个文件的目录名。
File.unlink("a.txt")
删除一个文件。
File.rename("a.txt","b.txt")
将文件改名。
File.truncate("a.txt",0)
截断文件,第二个参数是要保留的字节数量。
File.size("a.txt")
文件的大小。
文件测试可以用FileTest这个内置模块,它有一些实用的模块方法:
FileTest::exist? # 对象是否存在
FileTest::directory?# 是否一个目录
FileTest::file? # 是否一个文件
FileTest::readable? # 是否可读
FileTest::writable? # 是否可写
FileTest::executable? # 是否可执行
不过FileTest的大多数方法,File类自身也包含了。
你可能还对File.stat感兴趣,例如:
File.stat("a.txt").mtime
文件的修改时间。
File.stat("a.txt").mode
文件的许可模式。
改变目录用Dir.chdir方法:
Dir.chdir "/path"
列出一个目录里的所有文件,使用Dir.entries方法:
Dir.entries("/path")
它返回一个包括目录里所有文件和子目录的数组。
或者用Dir.foreach遍历目录:
irb(main):093:0> Dir.foreach("/path") do |d|
irb(main):094:1* puts d
irb(main):095:1> end
可以更简单:
Dir["/path/*"]
它返回的数组包括/path下的所有文件和子目录,但是不包含隐藏的。
当然还可以Dir["/path/*.txt"],匹配txt结尾的文件等。
创建目录:
Dir.mkdir "aaatest"
上述mkdir再执行一次会出错,因为目录已存在了。
如何实现unix的mkdir -p的效果呢?
使用fileutils,这个类有非常多的实用方法,例如:
require "fileutils"
FileUtils.makedirs("/path/to/dir")
还有remove_dir可以模拟rm -rf效果,强行删除目录:
FileUtils.remove_dir("/path/to/dir")
最后,说明一下如何创建临时文件。
使用Tempfile类:
require "tempfile"
temp = Tempfile.new("stuff")# 创建一个临时文件目标,stuff是随机字串
name = temp.path # 临时文件路径
temp.puts "zuerrong was here" # 写入内容
temp.close # 临时关闭,文件不会删除
# 稍后...
temp.open # 再次打开
str = temp.gets # "zuerrong was here"
temp.close(true) # 真正的关闭,文件被删除 好贴!
顶~ :emn10: 坚决学习。。。 文件这个话题我也比较感兴趣 拜读了,写的很详细 大家好好讨论一下,真不错
页:
[1]