Ruby File类实现操作文件系统的方法

1、文件的打开/关闭

      通过IO类的子类File类可以进行文件的输入、输出处理。File类中封装了文件的删除、文件属性变更等文件专用的功能,而一些基本的输入输出处理则使用继承自IO类的方法.

   io = File.open(file, mode)
   io = open(file, mode)
      通过File.open方法或open方法打开文件并获取新的IO对象。模式(mode)会指定以何种目的打开文件,缺省模式为制度模式(“r”)。

     (a)io.close    使用close方法关闭已打开的文件。1个程序中同时打开文件的数量是有限的,因此使用完的文件要尽快关闭。如果打开多个文件而不进行关闭操作,程序就很可能会在使用open方法时突然产生异常。File.open 方法如果使用块,则文件会在使用完后自动关闭。这种情况下,IO对象会被作为块变量传递给块。快执行完毕后,块变量引用IO对象也会自动关闭。这种写法回事输入/输出范围更加清晰。

     File.open("test.txt") do |io|
	     while line =io.gets
		......
	      end
     end
    (b)io.closed?  用close?方法可以检查IO对象是否关闭了。
     io = File.open("test.txt")
     io.close
     p io.closed? #>true
    (c)File.read(file)    使用类方法read可以一次性读取文件file的内容
    data = File.read("test.txt")
2、文件输入操作

      (a)、io.gets(rs)/io.each(rs)/io.each_line(rs)/io.readlines(rs)   从IO类的对象io中读取一行数据。用参数rs的字符串分行。缺省rs时则用预定义变量$/(默认值为"\n")。

             这些方法返回的字符串中包含行末尾的换行符。用chmop!方法可以方便地删除字符串末尾的换行符。输入完毕后再尝试获取数据时,gets方法会返回nil。另外,我们可使用eof?方法检查输入是否完毕。

      while line = io.gets
	   line.chomp!
	   ......  #对line进行操作
      end
      p io.eof? #=>true
            用each_line、readlines也可以实现同样的效果
      io.each_line do |line|
	line.chomp!
	...... #对line进行的操作
      end
            另外,用readlines方法返回存放每行数据的数组

      ary = io.readlines
      ary.each_line do |line|
	 line.chomp!
	......  #对line进行操作
      end

     (b)、io.lineno/io.lineno=(number)    使用gets方法、each_line方法逐行读取数据时,会自动记录读取的行数。这个行数可以通过lineno方法取得。此外,通过lineno=方法也可以改变这个值,但值的改变并不会对文件的指针有影响。
      $stdin.each_line do |line|
	printf("%3d %s", $stdin.lineno, line)
      end
     (c)、io.each_char    逐个字符地读取io中的数据并执行块。将得到的字符(String对象)作为块变量传递。

      io.each_char do |ch|
	... #对line进行的操作
      end
     (d)、io.each_byte   逐个字节地读取io中的数据并启动块。将得到的字节所对应的ASCII码以整数形式传递给块变量。

     (e)、io.getc  只读取io中的一个字符。根据文件的编码不同,有时一个字符会由多个字节组成,但这个方法只会读取一个字符,然后返回其字符串对象。数据读完继续读返回nil。

      while  ch = io.getc
          ...... #对line进行操作
      end
     (f)、io.ungetc(ch)   将参数ch指定的字符退回到io的输入缓冲中。
    (g)、io.getbyte    只读取io中的一个字节,返回得到的字节转换为ASCII码后的整数对象。数据全部读取玩后再读取时会返回nil。

    (h)、io.ungetbyte(byte)  将参数byte指定的一个字节退回到输入缓冲中。参数为整数时,将该整数除以256后的余数作为ASCII码字符返回一个字节;参数为字符串时,返回字符串的第一个字节。

    (i)、io.read(size)  读取参数size指定的大小的数据。不指定大小时,则一次性读取全部数据并返回。

3、输出操作

     (a)、io.puts(str0,str1,...)    对字符串末尾添加换行符后输出。指定多个参数时,会分别添加换行符。

     (b)、io.putc(ch)   输出参数ch指定的字符编码所对应的字符。参数为字符串时输出首字符。

     (c)、io.print(str0,str1,...)  输出参数指定字符串。参数可指定多个字符串。参数为String 以外的对象时会自动将其转换为字符串。

     (d)、io.printf(fmt,arg0,arg1,...)  按照指定格式输出字符串。

     (e)、io.write(str)   输出参数str指定的字符串。参数为String以外的对象时会自动将其转换为字符串。方法返回值为输出的字节数。

     (f)、io<< str   输出参数str指定的字符串。<< 会返回接受者本身


   

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值