Ruby 文件/文本操作

2017-09-26  本文已影响476人  changsanjiang
#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

# 文件的输入与输出
    # => Ruby 提供了一整套 I/O 相关的方法, 在内核模块中实现. 
    # => 所有的 I/O 方法派生子 IO 类.
    # => 类 I/O 提供了所有基础的方法, 比如 read、write、gets、puts、readline、getc 和 printf.

# => puts 语句
    # => puts 语句指示程序显示存储在变量中的值, 并在每行末尾添加一个新行.
str1 = 'Hello Ruby'
str2 = 'Hello World'
puts str1, str2

# => gets 语句
    # => gets 语句可用于获取来自名称 STDIN 的标准屏幕的用户输入. 
# puts "Enter your name: "
# name = gets
# puts "Your name is #{name}."


# => putc 语句
    # => 与 puts 语句不同, puts 语句输出整个字符串到屏幕上, 而 putc 语句可用于依次输出一个字符.
putc str1

puts


# => print 语句
    # => print 语句与 puts 语句类似. 唯一的不同在于 puts 语句在输出内容后会跳到下一行. 而print不会.
print str1
print "----"
print str2

puts

# 操作实际的数据文件.

# => 打开文件的不同 mode
# => 模式 描述
# =>  r     只读模式. 文件指针被放置在文件的开头. 这是默认模式. 输入会直接覆盖原有内容.
# =>  r+    读写模式. 文件指针被放置在文件的开头. 输入会直接覆盖原有内容
# =>  w     只写模式. 如果文件存在, 则重写(清除内容)文件. 如果文件不存在, 则创建一个新文件用于写入.    
# =>  w+    读写模式. 如果文件存在, 则重写(清除内容)文件. 如果文件不存在, 则创建一个新文件用于读写.
# =>  a     只写模式. 如果文件存在, 则文件指针被放置在文件的末尾. 也就是说, 这是追加模式. 如果文件不存在, 则创建一个新文件用于写入. 
# =>  a+    读写模式. 如果文件存在, 则文件指针被放置在文件的末尾. 也就是说, 这是追加模式. 如果文件不存在, 则创建一个新文件用于读写.


# => File.new
    # => 使用 File.new 方法创建一个 File 对象用于读取、 写入或者读写, 读写权限取决于 mode 参数.
    # => 使用 File.close 来关闭文件.
#aFile = File.new("/Users/SanJiang/Desktop/rubyFile.rb", "a")
    # ... 处理文件
#aFile.close

# => File.open
    # => 使用 File.open 方法创建一个新的 File 对象, 并把该 File 对象赋值给文件. 
    # => File.open 和 File.new 方法之间有一点不同, File.open 方法可与块关联, 而 File.new 方法不能.
#File.open("/Users/SanJiang/Desktop/rubyFile.rb", "w") do |aFile|
    # ... 处理文件
#end



# 读取和写入文件
    # => 用于简单的 I/O 的 method 也可用于所有 file 对象. 
    # => gets 从标准输入读取一行, 而 aFile.gets 就是从文件对象 aFile 读取一行. 
    # => 但是 I/O 对象提供了访问方法的附加设置, 为我们提供了便利. 

# => sysread 方法
#aFile = File.new("rubyFile.rb", "r")
#if aFile
    # => 该语句将读取输入文件的 20 个字符. 文件指针将被放置在文件中第 21 个字符的位置.
#   content = aFile.sysread(20)
#   puts content
#   content = aFile.sysread(20)
#   puts content
#else
#   puts "Unable to open file!"
#end

#aFile.close

# => syswrite 方法
#aFile = File.new("rubyFile.rb", "r+")
#if aFile
#   aFile.syswrite("Add Add Add Add")
#else
#   puts "Unable to open file!"
#end

#aFile.rewind
#content = aFile.sysread(50)
#puts content

#aFile.close



# each_byte 方法
    # => 该方法属于类 File. 方法 each_byte 可以迭代字符串中每个字符. 

#aFile = File.new("rubyFile.rb", "r+")
#if aFile
    #aFile.syswrite("add add add ")
    #aFile.rewind
    #aFile.each_byte{|ch| putc ch; putc ?.}
#else
    #puts "Unable to open file"
#end

#aFile.rewind
#puts aFile.sysread(50)
#aFile.close

# IO.readlines 方法
    # => 类 File 是类 IO 的一个子类. 类 IO 也有一些用于操作文件的方法.
    # => IO.readlines 是 IO 类中的一个方法. 该方法逐行返回文件的内容.
#arr = IO.readlines("rubyFile.rb")
    # 文件中的每一行将是数组 arr 的一个元素. 
#puts arr[0]
#puts arr[1]
#puts 
#puts arr

# IO.foreach 方法
    # => 该方法也逐行返回输出. 
    # => 与 readlines 不同的是: foreach 与块相关联. 
    # => 但是, 不返回数组. 
#IO.foreach("rubyFile.rb"){|content| puts content}

# 重命名和删除文件
    # => 通过 rename 和 delete 方法来重命名和删除文件
#File.rename("rubyFile.rb", "ruby.rb")

#File.delete("ruby.rb") # 是直接清空... 连垃圾箱都不去..


# 文件模式与所有权
    # => 使用带有掩码的 chmod 方法来改变文件的模式活权限/访问列表:
    # => 如下: 改变一个文件的掩码值.
#file = File.new("ruby.rb", "w")
#file.chmod(4000)

# => 掩码 描述
# => 0700   rwx 掩码, 针对所有者
# => 0400   r, 针对所有者
# => 0200   w, 针对所有者
# => 0100   x, 针对所有者, 无访问权限
# => 0070   rwx, 针对所属组
# => 0040   r, 针对所属组
# => 0020   w, 针对所属组
# => 0010   x, 针对所属组
# => 0007   rwx, 针对其他人
# => 0004   r, 针对其他人
# => 0002   w, 针对其他人
# => 0001   x, 针对其他人
# => 4000   执行时设置用户 ID
# => 2000   执行时设置所属组 ID
# => 1000   保存交换文本,甚至在使用后也会保存



# 文件查询
    # => 如果文件存在, 打开文件.
#File.open("ruby.rb") if File::exists?("ruby.rb")
    # => 查询目标是否是一个文件
#puts File.file?("ruby.rb")
    # => 查询目标是否是一个目录
#puts File::directory?("/usr/local/bin") # => true
    # => 如果查询的是文件, 将返回 false
#puts File::directory?("ruby.rb")
    # => 查询文件是否可读、可写、可执行:
#puts File.readable?("ruby.rb") # => true
#puts File.writable?("ruby.rb") # => true
#puts File.executable?("ruby.rb") # => false
    # => 查询文件大小是否为零
#puts File.zero?("ruby.rb") 
    # => 获取文件的大小
#puts File.size?("ruby.rb")
    # => 查询文件的类型
#puts File.ftype("2.0.0") # => file、 directory、 characterSpecial、 blockSpecial、 fifo、 link、 socket 或 unknown.
    # => 获取创建、修改活最后访问的时间:
#puts File::ctime("ruby.rb")
#puts File::mtime("ruby.rb")
#puts File::atime("ruby.rb")


# Ruby 中的目录
    # => 所有的文件都是包含在目录中
    # => 在 Ruby 中 File 类用于处理文件, Dir 类用于处理目录.
    # warning Next......

# => 浏览目录
    # => 查看当前目录:
#puts Dir.pwd # => 返回当前目录

# => Dir.entries 获取指定目录内的文件盒目录列表
#puts Dir.entries("/Users/SanJiang/Desktop").join(' ') 
# => Dir.foreach 也提供了相同的功能
#Dir.foreach("/usr/bin") do |entry|
    #puts entry
#end
# => 更简洁的获取Dir的方法
#puts Dir["/usr/bin/*"]

# 创建目录
    # => Dir.mkdir
#Dir.mkdir("FirstRubyMakeDir")
    # => 设置权限
    # => 掩码 755 设置
#Dir.mkdir("FirstRubyMakeDir", 755)

# 删除目录
#Dir.delete("FirstRubyMakeDir")

# 创建文件 & 临时目录
    # => 临时文件是那些在程序执行过程中被简单地创建, 但不会永久性存储的信息.
    # => Dir.tmpdir 提供了当前系统上临时目录的路径, 但是该方法默认情况下是不可用的. 
    # => 为了让 Dir.tmpdir 可用, 使用必需的 ‘tmpdir’ 是必需的.
    # => 你可以把 Dir.tmpdir 和 File.join 一起使用, 来创建一个独立于平台的临时文件.
#require 'tmpdir'
#tempfilename = File.join(Dir.tmpdir, "tingtong")
#tempfile = File.new(tempfilename, "w")
#tempfile.puts "This is a temporaray file"
#tempfile.close
#File.delete(tempfilename)

# 内建函数
# => File 类和方法: http://www.runoob.com/ruby/ruby-file-methods.html
# => Dir 类和方法: http://www.runoob.com/ruby/ruby-dir-methods.html


上一篇下一篇

猜你喜欢

热点阅读