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.newFile.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会在块执行完毕后为您关闭文件。