如何在Ruby中写入文件?

时间:2010-05-06 01:11:40

标签: ruby file-io

我需要从数据库中读取数据,然后将其保存在文本文件中。

我怎么能在Ruby中做到这一点? Ruby中有没有文件管理系统?

7 个答案:

答案 0 :(得分:881)

您在寻找以下内容吗?

File.open(yourfile, 'w') { |file| file.write("your text") }

答案 1 :(得分:572)

您可以使用简短版本:

File.write('/path/to/file', 'Some glorious content')

返回写入的长度;有关详细信息和选项,请参阅::write

要附加到文件,如果它已经存在,请使用:

File.write('/path/to/file', 'Some glorious content', mode: 'a')

答案 2 :(得分:240)

在大多数情况下,这是首选方法:

 File.open(yourfile, 'w') { |file| file.write("your text") }

当块传递给File.open时,当块终止时,File对象将自动关闭。

如果您没有将块传递给File.open,则必须确保文件已正确关闭且内容已写入文件。

begin
  file = File.open("/tmp/some_file", "w")
  file.write("your text") 
rescue IOError => e
  #some error occur, dir not writable etc.
ensure
  file.close unless file.nil?
end

您可以在documentation中找到它:

static VALUE rb_io_s_open(int argc, VALUE *argv, VALUE klass)
{
    VALUE io = rb_class_new_instance(argc, argv, klass);
    if (rb_block_given_p()) {
        return rb_ensure(rb_yield, io, io_close, io);
    }
    return io;
}

答案 3 :(得分:169)

Ruby File class会为您提供::new::open的细节,但其父级IO class会深入#read#write

答案 4 :(得分:112)

Zambri的回答found here是最好的。

File.open("out.txt", '<OPTION>') {|f| f.write("write your stuff here") }

<OPTION>的选项是:

r - 只读。该文件必须存在。

w - 创建一个空文件进行写作。

a - 附加到文件。如果文件不存在,则创建该文件。

r+ - 打开文件以进行更新读写。该文件必须存在。

w+ - 为读取和写入创建一个空文件。

a+ - 打开一个文件进行阅读和追加。如果文件不存在,则创建该文件。

在您的情况下,w更可取。

答案 5 :(得分:31)

对于我们这些通过实例学习的人......

将文字写入如下文件:

IO.write('/tmp/msg.txt', 'hi')

奖励信息......

像这样读回来

IO.read('/tmp/msg.txt')

我经常想把文件读到我的剪贴板***

Clipboard.copy IO.read('/tmp/msg.txt')

有时候,我想把我剪贴板中的内容写到文件***

IO.write('/tmp/msg.txt', Clipboard.paste)

***假设您已安装剪贴板gem

请参阅:https://rubygems.org/gems/clipboard

答案 6 :(得分:18)

要销毁文件的先前内容,请将新字符串写入文件:

open('myfile.txt', 'w') { |f| f << "some text or data structures..." } 

要附加到文件而不覆盖其旧内容:

open('myfile.txt', "a") { |f| f << 'I am appended string' }