调用fs.writeFile时如何每次向.txt文件写入新行?尝试\n无效
为什么你的
fs.writeFile无法写入新行?解决方案在这里 嘿,我懂你遇到的麻烦了——你循环调用fs.writeFile想写入多行,但最后文件里只有最后一行,对吧?这不是\n的问题,而是fs.writeFile的默认行为在搞鬼!
问题根源
默认情况下,fs.writeFile的作用是创建新文件,或者覆盖已有文件的全部内容。你的循环里每次调用这个方法,都会把之前写入的内容清空,然后写入当前的\n + i,所以最后文件里只会留下最后一次循环的结果,自然看不到多行啦。
两种快速解决方案
方案1:用fs.appendFile专门追加内容
fs.appendFile就是为追加内容设计的,它会自动把内容加到文件末尾,不需要额外配置:
const fs = require('fs'); for(let i = 0; i < 5; i++){ fs.appendFile('./file.txt', '\n' + i.toString(), (error) => { if(error){ console.log(error) }else{ console.log('success') } }) }
方案2:给fs.writeFile加append模式的flag
如果你还是想用fs.writeFile,只需要在第三个参数里加上{ flag: 'a' },'a'代表append(追加)模式,这样就不会覆盖原有内容了:
const fs = require('fs'); for(let i = 0; i < 5; i++){ fs.writeFile('./file.txt', '\n' + i.toString(), { flag: 'a' }, (error) => { if(error){ console.log(error) }else{ console.log('success') } }) }
额外提示:避免异步写入顺序混乱
因为fs的这些方法是异步的,循环里会同时发起多个写入请求,偶尔可能出现内容顺序错乱的情况。如果需要严格保证写入顺序,可以改用同步方法,或者用Promise+async/await来控制流程:
const fs = require('fs').promises; async function writeLinesInOrder() { for(let i = 0; i < 5; i++){ try { await fs.appendFile('./file.txt', '\n' + i.toString()); console.log('success'); } catch (error) { console.log(error); } } } writeLinesInOrder();
这样就能确保每一行都按顺序写入啦!
内容的提问来源于stack exchange,提问作者axelgreavette
相关产品推荐
相关产品推荐

