- fs – 文件模块
注:是内置模块,直接require引入即可。
fs.stat(file, (err,data)=>{})
查询文件状态(data.isFile()–判断是否是文件,isDirectory()–判断是否是文件夹)
fs.mkdir(fileName,err => {})
创建文件夹 (fileName–文件夹名称,重复会报错,例如:’./test‘),注意:此方法不能连续创建文件夹,例如:/test/one/two
fs.readdir(fileName,err => {})
读取文件夹,返回文件夹的所有直系子文件名称,移动文件位置等
fs.rename(newFileName,oldFileName,err => {})
修改文件夹、文件的名称
fs.writeFile(file,err=> {})
创建文件 (file—对应路径下的文件,包括文件名,例如:’./test/test.txt‘ ,如文件已存在,会覆盖原文件内容)
fs.appendFile(file,err=> {})
追加文件内容,会在文件内容末尾追加(若文件不存在,回先自动创建,类似于writeFile)
fs.readFile(file,’utf-8‘,(err,data)=>{})
读取文件内容,不设置格式,会返回Buffer数据,需要设置格式,例如utf-8,或者通过data.toString()进行转化
fs.unlink(file,err=> {})
删除文件
fs.rmdir(file,err=> {})
删除文件夹,若文件夹下有文件,会报错,只能删除空文件夹
注:若要连续创建文件夹,可以下载mkdirp模块包,mkdirp('./one/two/three')
既可以创建连续目录。(目前测试不支持创建文件,写入内容,npm地址:https://www.npmjs.com/package/mkdirp)
以上api基本都有对应的async 写法。
// 引入文件模块
const fs = require('fs')
const mkdirp = require('mkdirp')
// fs.stat('./request.js',(err,data) => {
// if (err) return
// console.log(`是文件:${data.isFile()}`)
// console.log(`是目录:${data.isDirectory()}`)
// })
// fs.mkdir('./test1/one1',err=> {
// if (err) return console.log(err);
// console.log('创建成功!');
// })
// fs.writeFile('./test/one/one23.txt','我是内容99哦!',err => {
// if (err) return
// console.log('创建文件成功!');
// })
// fs.appendFile('./test/test.txt','我是加入的哦!',err=>{
// if (err) return
// console.log('追加文件成功!');
// })
// fs.readFile('./test/test.txt','utf-8',(err,data) => {
// if (err) return
// console.log(`读取文件内容是:${data}`);
// })
// fs.readdir('./test',(err,data) => {
// if (err) return
// console.log(`改文件加下的文件如下:${data}`);
// })
// fs.rename('./test/two/one.txt','./test/one/one.txt',err => {
// if (err) return
// console.log('修改/移动文件成功');
// })
// fs.unlink('./test/two/two.txt',err=> {
// if (err) return
// console.log('删除文件成功');
// })
// fs.rmdir('./test/two',err=> {
// if (err) return
// console.log('删除文件夹成功');
// })
// 直接回调,某些版本会报错,需要拆成 .then .catch
// mkdirp('./one/two/three').catch(err => {
// console.log(err,88);
// }).then(res => {
// console.log(res);
// })
2.fs流操作
- 写入流createWriteStream
- 读取流createReadStream
- 管道流pipe
writeStr:(str) => {
// 需要先创建流
const writeStream = fs.createWriteStream('./test.txt')
writeStream.write(str) // str为写入内容
writeStream.end() // 此句必须写,不然无法触发下面的finish事件
writeStream.on('finish',() => {
console.log('写入完成');
})
}
let str = ''
let count = 0
let readStream = fs.createReadStream('./test.txt')
console.log(readStream);
readStream.on('data',data => {
str += data
count++
})
readStream.on('end',() => {
console.log(str,'str----',count);
})
readStream.on('err',err => {
console.log(err,'err----');
})
let readStream = fs.createReadStream('./test.txt')
let writeStream = fs.createWriteStream('./one.txt')
// 将读取的test文件内容,写入到one,one如有内容,会被覆盖
readStream.pipe(writeStream)
问题:目前创建文件夹时,如果该路径下,存在一个同名的不带任何后缀名的文件,会导致创建文件夹报错,目前还未发现解决办法,如有知道的小伙伴,欢迎解惑!
如有错误,欢迎大家指正留言,相互学习!