在javascript中,如何使用fs.writeFile并循环一个数组,并在新的文本文件中垂直完整地打印数组中的每个项



我正在尝试使用 fs.writeFile 从字符串数组循环以创建一个新的文本文件。 我使用fs.writeSync并且它起作用了。 但是,当我使用 fs.writeFile 时,我创建的文本文件中的内容不会显示数组中的每个项目。相反,结果更像是我的数组中一些不完整的字符串。 我使用 setTime(( 函数将其设置为 3 秒,但仍然没有在我的文本文件中显示完整的结果。

fs.writeSync完美运行

function fileWriteSync(filePath) {
const fd = fs.openSync(filePath, 'w');
for (var i = 0; i < tips.length; i++) {
fs.writeSync(fd, tips[i] + 'n');
console.log(tips[i]);
}
fs.closeSync(fd);
}
tips = [
"Work in teams",
"get enough sleep",
"be on time",
"Rely on systems",
"Create a rough weekly schedule",
"Get rid of distractions before they become distractions",
"Develop good posture",
"Don’t multitask",
"Cultivate the belief that intelligence isn’t a fixed trait",
"Work in short blocks of time", "Exercise regularly",
"Be organized", "Break big tasks into smaller ones",
"Take notes during class", "Ask lots of questions",
"Eat healthily",
"Do consistent work",
"Manage your thoughts and emotions",
"Give yourself rewards",
"Manage your stress"
]

function fileWrite2(savePath) {
setTimeout(() => {
for (var i = 0; i < tips.length; i++) {
fs.writeFile(savePath, tips[i] + "n", function(err) {
if (err) throw err;
});
}
console.log('File written sucessfully');
}, 3000);
}
fileWrite2('tips3.txt')

我当前的输出:

管理你的压力 和情绪 ENCE不是一个固定的特征

writeFile 的工作方式是它不是附加到文件中,而是替换其中的文本。这就是您获得输出的原因。

您可以改用函数 appendFile。

function fileWrite2(savePath) {
setTimeout(() => {
for (var i = 0; i < tips.length; i++) {
fs.appendFile(savePath, tips[i] + "n", function(err) {
if (err) throw err;
});
}
console.log('File written sucessfully');
}, 3000);
}

fs.writeSync会将给定的内容写入文件,从而导致重写文件的现有内容。

如果您希望附加到文件中,则应使用fs.appendFileSync来实现此目的。

在此之前,一个快速提示:

您应该检查目录/文件是否已存在,并且 然后创建一个新目录(如果不存在(。

您可以使用fs.ensureDirSync(dir)fs.mkdirSync(dir)来执行此操作

if (!fs.ensureDirSync(dir)) {
fs.mkdirSync(dir);
}

现在,您可以使用fs.appendFileSync附加到文件。

fs.appendFileSync(dir, 'your data!', function(err){
if(err)
return err;
console.log("file saved successfully");
});

这里要注意的主要概念是,任何写入文件操作都将替换文件和内容,而附加文件操作将内容附加到文件末尾。

最新更新