#!/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
网友评论