node.js 实战——(fs模块 知识点学习)
fs 模块
也可以称之为文件系统模块,是node中的内置模块,可以实现与硬盘的交互。比如文件的创建、删除、重命名、移动,还有文件内容的写入、读取,以及文件夹的相关操作
导入fs模块
const fs = require('fs')
文件写入
writeFile 异步写入
writeFile(file,data[,options],callback)
- file 文件名
- data 要写入的数据
- options 设置选项,不是必填项
- callback 为回调函数,写入成功,返回null
const fs = require("fs");
fs.writeFile('./file/wirte.txt',"你好",(err)=>{if(err){console.log('写入失败');return;}console.log("写入成功");
})
writeFileSync 同步写入
writeFileSync(file, data[, options])
- file 文件名
- data 要写入的数据
- options 设置选项,不是必填项
没有回调函数,执行到这句话是,主线程会停下来等待,直到执行完毕;返回值为undefined
appendFile/appendFileSync 文件追加写入
appendFile 作用是在文件尾部追加内容,appendFile 语法与 writeFile 语法完全相同;appendFileSync语法与writeFileSync语法相同
appendFile(file, data[, options], callback)
appendFileSync(file, data[, options])
fs.appendFile('./file/wirte.txt',"你好!!!",(err)=>{if(err){console.log('追加失败');return;}console.log("追加成功");
})
注意:writeFile 也可以实现追加,只需要在options 中将 flag 设置为a 即可
fs.writeFile('./file/wirte.txt',"你好",{flag:'a'},(err)=>{if(err){console.log('写入失败');return;}console.log("写入成功");
})
createWriteStream 流式写入
createWriteStream(path[, options])
- path: 文件路径
- options 设置选项,不是必填项
const fs = require("fs");let ws=fs.createWriteStream("./file/2_1.docx");
ws.write("njksdhfdshfjkdhf")
ws.end()
程序打开一个文件是需要消耗资源的 ,流式写入可以减少打开关闭文件的次数。
流式写入方式适用于 大文件写入或者频繁写入 的场景, writeFile 适合于 写入频率较低的场景
文件读取
readFile 异步读取
readFile(path[, options], callback)
- path 文件路径
- options 设置选项,不是必填项
- callback 回调函数,有两个参数(err,data)
err ——失败返回信息,成功返回null
data——数据,格式为buffer
const fs = require("fs");
fs.readFile("./fileSystem.txt", "utf8", (err, data) => {if (err) {console.log(err)}console.log(data)
})
readFIleSync 同步读取
readFileSync(path[, options])
- path 文件路径
- options 设置选项,不是必填项
let data =fs.readFileSync("./file/2.mov")
createReadStream 流式读取
createReadStream(path[, options])
- path 文件路径
- options 设置选项,不是必填项
读取文件是一块一块的读取
const fs = require("fs");let rs=fs.createReadStream("./file/2.mov");
rs.on("data", chunk => {//每一次最大读取65536字节,即64kB
})
//读取完毕之后,会触发end事件
rs.on("end", () => {})
文件重名和移动
可以使用 rename 或 renameSync 来移动或重命名 文件或文件夹
rename(oldPath, newPath, callback)
renameSync(oldPath, newPath)
- oldPath 文件当前的路径
- newPath 文件新的路径
- callback 操作后的回调
文件删除
使用 unlink/rm 或 unlinkSync/rmSync 来删除文件
unlink/rm(path, callback)
unlinkSync/rmSync(path)
- path 文件路径
- callback 操作后的回调
文件夹操作
创建文件夹
使用 mkdir 或 mkdirSync 来创建文件夹
mkdir(path[, options], callback)
mkdirSync(path[, options])
- path 文件路径
- options 设置选项,不是必填项
- callback 回调函数,有1个参数(err)
err ——失败返回信息,成功返回null
fs.mkdir('./test', err => {
if(err) throw err;
console.log('创建成功');
});
//递归异步创建
fs.mkdir('./test1/2/3', {recursive: true}, err => {
if(err) throw err;
console.log('递归创建成功');
});
//递归同步创建文件夹
fs.mkdirSync('./test/y/z', {recursive: true});
读取文件夹
使用 readdir 或 readdirSync 来读取文件夹
readdir(path[, options], callback)
- path 文件路径
- options 设置选项,不是必填项
- callback 回调函数,两个个参数(err,data)
err ——失败返回信息,成功返回nul
data——数据,返回的是列表
fs.readdir('./public', (err, data) => {
if(err) throw err;
console.log(data);
});
删除文件夹
使用 rmdir 或 rmdirSync 来删除文件夹
rmdir(path[, options], callback)
- path 文件路径
- options 设置选项,不是必填项
- callback 回调函数,有1个参数(err)
err ——失败返回信息,成功返回null
fs.rmdir('./test', err => {
if(err) throw err;
console.log('删除成功');
});
//异步递归删除文件夹
fs.rmdir('./test1', {recursive: true}, err => {
if(err) {
console.log(err);
}
console.log('递归删除')
});
//同步递归删除文件夹
fs.rmdirSync('./test', {recursive: true})
__dirname
__dirname 与 require 类似,都是 Node.js 环境中的’全局’变量
__dirname 保存着 当前文件所在目录的绝对路径 ,可以使用 __dirname 与文件名拼接成绝对路径
使用 fs 模块的时候,尽量使用 __dirname 将路径转化为绝对路径,这样可以避免相对路径产生的
Bug