Ruby:为什么我不能创建新文件?
我正在尝试创建一个json文件并写入它。
我的代码如下所示:
def save_as_json(object) f = File.new('file.json') f.puts(object.to_json, 'w') f.close end save_as_json({'name'=>'fred'})
问题是,运行时出现以下错误:
:15:in `initialize': No such file or directory @ rb_sysopen - file.json (Errno::ENOENT)
我要求Ruby创建该文件,但它抱怨它不存在! 创建和写入文件的正确方法是什么?
您只需要使用’w’模式打开文件,如下所示:
f = File.new('file.json', 'w')
您希望根据计划对文件执行的操作来确定模式,但以下是您的选择:
“r”只读,从文件开头(默认模式)开始。
“r +”读写,从文件开头开始。
“w”只写,将现有文件截断为零长度或创建用于写入的新文件。
“w +”读写,将现有文件截断为零长度或创建用于读写的新文件。
“a”只写,每次写入调用都会在文件末尾附加数据。 如果文件不存在,则创建用于写入的新文件。
“a +”读写,每次写入调用都会在文件末尾附加数据。 如果文件不存在,则创建用于读写的新文件。
IO Docs
文件创建默认为读取模式,因此尝试使用不存在的filespec将导致错误:
2.3.0 :001 > f = File.new 'foo' Errno::ENOENT: No such file or directory @ rb_sysopen - foo
你需要指定’w’:
2.3.0 :002 > f = File.new 'foo', 'w' => #
也就是说,使用File.new
或File.open
可以更轻松地写入文件,而不是获取文件句柄。 Ruby中最简单的方法是调用File.write
:
File.write('file.json', object.to_json)
如果需要,可以使用更长的File.open
方法; 如果你这样做,最简单的方法是将一个块传递给File.open:
File.open('file.json', 'w') { |f| f << object.to_json }
这样就无需显式关闭文件; 传递块时, File.open
会在块执行完毕后为您关闭文件。