首页 > 解决方案 > 如何在列表中使用 fs.writeFileSync 写入文件

问题描述

我试图制作我的第一个“AI”来存储我每次打开时与“聊天机器人”一起使用的单词,就像我使用“hello”然后我使用“Heya”一样,聊天机器人会将这些单词写在 json 文件中并在我打开程序时随机使用这些词来打招呼

(此时我只是想把这些词写在一个列表上,机器人用这些我已经没有创建的词来问候我)

这是我尝试的代码:

const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('Hello! ', (answer) => {
  // TODO: Log the answer in a database
  console.log(`The ${answer} word has stored :)`);
  
  fs.writeFileSync(__dirname + '/startkeywords.json', JSON.stringify(answer, null, 4));
  console.log('created at' + __dirname);

  rl.close();
});

但是,当我执行程序并说些什么时,它会写,但它不在只写的列表上,所以我试图将文件写在这样的列表上:

列表示例

请帮忙

标签: node.js

解决方案


如果要将“关键字”存储为有效的json 文件,则可能需要读取文件、添加数据并再次写入:

const fs = require('fs')
const startKeywordsFile = 'startkeywords.json'

// create an empty json if not exists
if (!fs.existsSync(startKeywordsFile)) {
    fs.writeFileSync(startKeywordsFile, '[]')
}
let words = JSON.parse(fs.readFileSync(startKeywordsFile, 'utf8'))

function addWord(newWord) {
    if (words.includes(newWord)) {
        // already exists
        return
    }
    words.push(newWord)
    fs.writeFileSync(startKeywordsFile, JSON.stringify(words, null, 4))
}

addWord('hi')
addWord('hello')

startkeywords.json

[
    "hi",
    "hello"
]

请记住,大型列表可能会出现性能问题。如果您想将关键字保存为纯文本(一行一个字,无效的 json),您可以使用fs.appendFileSync附加文件,而不必每次都重写整个文件。


推荐阅读