- 获取指定文件夹下的特一格式的文件名数组
import { reacddirSync } from 'fs'
const directory = './dataSource'
/** 获取 dataSource文件夹下所有.json格式的文件名称 */
function getNameListFromFolder(dir){
let fileList = []
const files = readdirSync(dir)
files.forEach((item)=>{
if(item.includes('.json')){
fileList.push(`${dir}/${item}`)
}
)}
// 读写文件
fileList.forEach((item)=>{
readAndWriteFile(item)
)}
}
getNameListFromFolder(directory)
- 读写文件
读文件:readFile 与 createReadStream
- fs.readFile() 函数缓冲整个文件。 为了最小化内存成本,在可能的情况下优先通过 fs.createReadStream() 进行流式传输。
- 中止正在进行的请求不会中止单个操作系统请求,而是中止内部缓冲的 fs.readFile 执行。
写文件:writeFile createWriteStream
- 在同一个文件上多次使用 fs.writeFile() 而不等待回调是不安全的。 对于这种情况,建议使用 fs.createWriteStream()。
- 与 fs.readFile 类似,fs.writeFile 是一个便捷的方法,其在内部执行多次 write 调用以写入传给它的缓冲区。 对于性能敏感的代码,则考虑使用 fs.createWriteStream()。
- 中止正在进行的请求不会中止单个操作系统请求,而是中止内部缓冲的 fs.writeFile 执行。
import { createReadStream, createWriteStream } form 'fs'
const writeFile = './output.txt'
const writeStream = createWriteStream(writeFile)
/** 读取文件,进行数据处理,写入其他文件 */
function readAndWriteFile(path){
const readStream = createReadStream(path)
// 当有数据流出时,写入数据
readStream.on('data',function(chunk){
// 对chunk进行数据处理,变为newChunk
// 如果没有写完,暂停读取数据流
if(writeStream.write(newChunk)===false){
readStream.pause()
}
})
// 写完后,继续读取
writeStream.on('drain',function(){
readStream.resume()
)}
//没有数据时,关闭数据流
readStream.on('end',function(){
writeStream.end()
)}
}
参考自 Node.js: fs.readFile/writeFile 和 fs.createReadStream/writeStream 区别