Ruby提供了两种不同的I/O方法。
第一种就是我们一直在用的RUBY的内核模块中的gets,open, print, printf, putc, puts, readline, readlines, 以及test。做为一直以来都在使用的standard input和standard output,我就不多做解释了。只要说一句大家就明白了,上面的函数如果出现在C中,那么实现就和C的语法一样,如果出现在JAVA中,你就直接使用JAVA的写法去调用,完全OK。
第二种方法就要体现出Ruby自己的东西了:I/O对象。接下来,我们就来看一下I/O对象的几类。还是从我们最常用的一个子类开始吧:File。
1、打开文件
可能你马上就想到了,既然File是一个类,那么new方法就应该可以用吧,呵呵,没错,我们可以用File.new(filename,openMode)这种方法来打开一个文件,相对的,我们也可以用File.close来关闭对一个文件的引用,这不需赘述。
可是我却要向大家推荐另外一种用法:File.open,这种方法也同样可以打开一个文件,那么他和new有何不同吗?在通常的应用之中,这两种方法并没有什么不同。但是如果在打开文件的方法之后附加了一个块的话,那他们的表现就不同了。Open方法将不再返回一个文件引用,而是去调用块里的代码,并把新打开的文件作为参数传给块使用。而当块中的代码执行完以后,文件将会自动关闭。Open的另外一个好处是,如果在执行过程中程序发生了异常,那么文件也将会自动关闭。而New就有可能因无法执行close而无法关闭文件。
2、读写文件
说起来没有什么大不了的,其实所谓读写文件不过是标准输入输出函数前面加上一个File.而已,也就是说我们用objFile.puts和objFile.gets来进行文件的读写就可以了。
3、使用迭代器读取文件
具体代码就是上面的那些
file = File.new(“testfile”, “r”)# … process the filefile.closetestfile是想要 *** 作的文件名,”r”说明了文件的 *** 作模式为读取。可以使用”w”表示写入,”rw”表示读写。最后要记得关闭打开的文件,确保所有被缓冲的数据被写入文件,所有相关的资源被释放。也可以使用File.open来打开文件,open和new的不同是open可以使用其后的代码块而new方法则返回一个File类的实例。File.open(“testfile”, “r”) do |file|# … process the fileendopen *** 作的另一个优点是处理了异常,如果处理一个文件发生错误抛出了异常的话,那么open *** 作会自动关闭这个文件,下面是open *** 作的大致实现:class Filedef File.open(*args)result = f = File.new(*args)if block_given?beginresult = yield fensuref.closeendendreturn resultendend对于文件的路径,Ruby会在不同的 *** 作系统间作转换。例如,在Windows下,/ruby/sample/test.rb会被转化为\ruby\sample\test.rb。当你使用字符串表示一个Windows下的文件时,请记住使用反斜线先转义:欢迎分享,转载请注明来源:内存溢出
评论列表(0条)