Node.js读取文件,如果存在则追加数据,如果不存在则创建文件

时间:2018-12-18 06:35:46

标签: node.js fs

我尝试使用fs.open()。但是当文件不存在时,数据就存在。 下面是我的代码:

fs.open('person.json', 'w', function (err, data) {
  if (err) throw err;
  console.log(data)
});

console.log(数据)结果为

  

3

那是为什么? 3来自哪里?

我的目的是读取文件(如果存在)并创建新文件(如果不存在)。如何在node.js中做到这一点?

3 个答案:

答案 0 :(得分:2)

  1. 听起来您要执行的 FIRST 操作是调用fs.statSync(),以检查文件是否存在。

  2. 如果存在,则调用fs.open("r")进行读取。

  3. 否则,听起来好像要创建它。 fs.open(“ w”),就像您在上面所做的一样,应该可以正常工作。

  4. fs.open返回文件描述符。我怀疑这可能是您要询问的“ 3”。


附录4/24/19

从历史上讲(其他语言,其他时间),坦率地说,使用“例外”来处理“控制流”的想法是恐怖

但是repeatdomiau有道理。文档确实似乎建议仅打开文件并处理可能出现的任何异常:

  

https://nodejs.org/api/fs.html

// Check if the file exists in the current directory, and if it is writable.
fs.access(file, fs.constants.F_OK | fs.constants.W_OK, (err) => {
  if (err) {
    console.error(
      `${file} ${err.code === 'ENOENT' ? 'does not exist' : 'is read-only'}`);
  } else {
    console.log(`${file} exists, and it is writable`);
  }
});
     

使用fs.access()之前检查文件的可访问性   不建议调用fs.open(),fs.readFile()或fs.writeFile()。   这样做会引入竞争条件,因为其他过程可能会更改   两次调用之间文件的状态。相反,用户代码应   直接打开/读取/写入文件,如果   文件不可访问。

答案 1 :(得分:2)

'3'-是文件描述符。 https://nodejs.org/api/fs.html#fs_file_descriptors

'w'-打开文件进行写入。文件已创建(如果不存在)或被截断(如果存在)。

使用'r +'-打开文件进行读写。如果文件不存在,则会发生异常。

https://nodejs.org/api/fs.html#fs_file_system_flags

答案 2 :(得分:0)

您可以使用“ ax”模式表示打开以进行追加。如果文件不存在,则会创建该文件,但会以独占模式打开文件。 或可以使用“ a +”模式表示打开以进行阅读和附加。如果文件不存在,则创建它 '3'是文件描述符(“ 在POSIX系统上,对于每个进程,内核都会维护一个当前打开的文件和资源的表。每个打开的文件都分配有一个简单的数字标识符,称为文件描述符。” 在系统级别,所有文件系统操作都使用这些文件描述符来标识和跟踪每个特定文件。 Windows系统使用不同但概念上相似的机制来跟踪资源。为了简化用户操作,Node.js提取了操作系统之间的特定差异,并为所有打开的文件分配了数字文件描述符。 fs.open()方法用于分配新的文件描述符。分配后,文件描述符可用于从文件读取数据,向文件写入数据或请求有关文件的信息。)