Nodejs中的fs模块
一、文件写入操作
writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容
语法:
writeFile(file, data[, options], callback) | 异步 |
writeFileSync(file, data) | 同步 |
参数:
file | 文件名 |
data | 要写入文件的数据 |
options | 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’ |
callback | 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。 |
代码:
// 1、导入fs模块
const fs = require('fs')
// 2、异步写入文件
fs.writeFile('./xxx.txt', '三人行, 则必有我师焉', err => {
// err写入失败: 错误对象 写入成功: null
if(err) {
console.log('写入失败')
return
}
console.log('写入成功')
})
// 2、同步写入文件
fs.writeFileSync('./data.txt', 'text')
二、追加写入
方式一、
语法:
appendFile(file, data, option, callback) | 同步 |
appendFileSync(file, data) | 异步 |
参数:
file | 追加的文件 |
data | 追加的内容 |
option | 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 ‘w’ |
callback | 操作后的回调 |
代码:
const fs = require('fs')
// 1、异步追加
fs.appendFile('./xxx.txt', '你说嘴巴嘟嘟,还是狗吧狗狗', err => {
// 判断
if(err) {
console.log('写入失败~~')
return
}
console.log('写入成功~~')
})
// 同步追加
fs.appendFileSync('./xxx.txt', '你说嘴巴嘟嘟,还是狗吧狗狗')
方式二、
代码:
const fs = require('fs')
fs.writeFile('./xxx.txt', '你说嘴巴嘟嘟,还是狗吧狗狗', {flag: 'a'}, err => {
// 判断
if(err) {
console.log('写入失败~~')
return
}
console.log('写入成功~~')
})
三、文件流式写入
代码:
// 1、导入fs
const fs = require('fs')
// 2、创建写入流对象
const ws = fs.createWriteStream('./观书后感.txt')
// 3、write
ws.write('半亩方塘一鉴开\r\n')
ws.write('天光云影共徘徊\r\n')
ws.write('问渠那得清如许\r\n')
ws.write('为有源头活水来\r\n')
// 关闭通道
ws.close();
四、文件读取
方法 | 说明 |
readFile | 异步读取 |
readFileSync | 同步读取 |
createReadStream | 流式读取 |
代码:
// 1. fs模块
const fs = require('fs')
// 2. 异步读取
fs.readFile('./观书后感.txt', (err, data) => {
if(err) {
console.log('读取失败~~')
return
}
console.log('读取成功~~', data.toString())
})
// 3. 同步读取
let data = fs.readFileSync('./观书后感.txt');
console.log(data.toString())
// 4. 流式读取
const rs = fs.createReadStream('./data.txt') // 创建读取流对象
rs.on('data', res => { // 绑定data事件
console.log(res)
})
rs.on('end', () => {
console.log('读取完成')
})
效果:
五、文件的复制
代码:
// 导入fs模块
const fs = require('fs')
// 方式一
// 1、读取文件
let data = fs.readFileSync('./data.txt')
// 2、写入文件
fs.writeFileSync('./data2.txt', data);
//方式二 流式操作(推荐使用)
// 1、创建读取流对象
const rs = fs.createReadStream('./data.txt')
// 2、创建写入流对象
const ws = fs.createWriteStream('./data3.txt')
// 3. 绑定data事件
rs.on('data', chunk => {
ws.write(chunk)
})
六、文件移动、重命名
语法:
rename(oldPath, newPath, callback) | 同步 |
renameSync(oldPath, newPath) | 异步 |
参数:
oldPath | 文件当前的路径 |
newPath | 新文件的路径 |
callback | 操作后的回调 |
代码:
const fs = require('fs')
// 修改名字
fs.rename('./data.txt', './new_data.txt', err => {
if(err) {
console.log('操作失败~~')
return
}
console.log('操作成功')
})
// 移动
fs.rename('./data2.txt', './data/new_data.txt', err => {
if(err) {
console.log('操作失败~~')
return
}
console.log('操作成功')
})
七、文件删除
语法:
unlink(path, callback) | 异步 |
unlinkSync | 同步 |
rm(path, callback) | 14.4版本 |
参数:
path | 文件路径 |
callback | 操作后的回调 |
代码:
const fs = require('fs')
fs.unlink('data3.txt', err => {
if(err) {
console.log('删除失败')
return
}
console.log('删除成功')
})
八、文件夹操作
1、创建
语法:
mkdir(path, options, callback) | 异步 |
mkdirSync(path, options) | 同步 |
参数:
path | 文件路径 |
options | 选项配置 |
callback | 操作后的回调 |
代码:
const fs = require('fs')
// 1、创建单个文件夹
fs.mkdir('./html', err => {
if(err) {
console.log('创建失败~~')
return
}
console.log("创建成功~~")
})
// 2、创建递归文件夹
fs.mkdir('./a/b/c', {recursive: true}, err => { // 需要添加{recursive: true} 参数
if(err) {
console.log('创建失败~~')
return
}
console.log("创建成功~~")
})
2、读取
语法:
readdir(path, callback) | 读取文件夹 |
参数:
path | 读取的文件夹 |
callback | 操作后的回调 |
代码:
const fs = require('fs')
fs.readdir('./data', (err, data) => {
if(err) {
console.log('读取失败')
return
}
console.log(data);
})
3、删除
语法:
rmdir(path, option, callback) | 不推荐使用 |
rm(path, option, callback) | 推荐使用 |
参数:
path | 路径 |
option | 其他参数 |
callback | 操作后回调 |
.0
代码:
const fs = require('fs')
// 删除
fs.rmdir('./html', err => {
if(err) {
console.log("删除失败")
return
}
console.log("删除成功")
})
// 递归删除 删除a/b/c
fs.rmdir('./a', {recursive: true}, err => {
if(err) {
console.log("删除失败")
return
}
console.log("删除成功")
})
// 推荐使用
fs.rm('./a', {recursive: true}, err => {
if(err) {
console.log("删除失败")
return
}
console.log("删除成功")
})