node.js - 如何在列表中使用 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();
});
但是,当我执行程序并说些什么时,它会写,但它不在只写的列表上,所以我试图将文件写在这样的列表上:
请帮忙
解决方案
如果要将“关键字”存储为有效的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
附加文件,而不必每次都重写整个文件。
推荐阅读
- android - 适配器无法与 Fragments 上的 Android 小部件一起正常工作(RecyclerView、ExpandableListView)
- linux - 如何使用 bash 命令删除文本文件中与多个模式匹配的行?
- web-services - java webservice jax-ws 什么时候需要@webmethod
- google-chrome-extension - Chrome 扩展程序警报不会从 background.js 触发
- python - 通过循环将数据从方程求解器写入文件仅输出最后 2 个元素
- r - GtrendsR 粒度数据下载
- python - Python/Excel UDF 在文件重新打开后停止工作
- networking - 您如何解释从不规则子网掩码派生的网络前缀?
- java - ThymLeaf:使用 th:{attribute} 设置现有属性
- common-lisp - Common Lisp 中的中缀符号宏