01 fs 了解
js
/**
* API 大多有三种操作方式
* 方式1:同步操作文件:代码会被阻塞
* 方式2:异步回调操作文件:需要传入回调函数 调用回调 获取结果
* 方式3:异步Promise :返回Promise 通过 then catch 来处理
*/
const fs = require('fs')
const filePath = "./abc.txt"
// 方式1 同步通过操作
const getFileStatus1 = fs.statSync(filePath)
console.log('获取文件', getFileStatus1)//获取文件
/**
* Stats {
dev: 4031650434,
mode: 33206,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: 4096,
ino: 281474978062517,
size: 17,
blocks: 0,
atimeMs: 1694870024431.592,
mtimeMs: 1694870024431.592,
ctimeMs: 1694870024431.592,
birthtimeMs: 1694870007769.3984,
atime: 2023-09-16T13:13:44.432Z,
mtime: 2023-09-16T13:13:44.432Z,
ctime: 2023-09-16T13:13:44.432Z,
birthtime: 2023-09-16T13:13:27.769Z
}
*/
// 方式2 异步获取
// const getFileStatus2 =
fs.stat(filePath, (err, data) => {
console.log('err', err)
console.log('data', data)// 同上
})
// console.log('getFileStatus2', getFileStatus2);
// 方式3 异步Promise
fs.promises.stat(filePath).then(res => {
console.log('res', res);// 同上
}).catch(err => console.log(err))
02 fs 文件的读写
js
/**
*
*
*/
const fs = require('fs')
const filePath = "./abc.txt"
const content = "hello world 我是 hello World"
/**
* 1文件写入
* @param{filePath, content,options:{flag:""},callback}
*
*/
fs.writeFile(filePath, content, (err) => {
console.log(err);//null error
})
// 注意读取写入 不要同时使用
// 2读取文件
fs.readFile(filePath, { encoding: 'utf-8' }, (err, data) => {
console.log('data', data)//data hello world 我是 hello World
})
03 fs 文件夹操作
js
/**
* 文件夹的操作
* 1.创建文件夹
* 2.读取文件所在文件的所有文件
* 3.文件夹的重命名
*/
const fs = require('fs')
const path = require('path')
const filePath = "./测试文件夹"
// 判断文件是否存在
console.log('fs.Directory.exists(filePath)', fs.existsSync(filePath))
if (!fs.existsSync(filePath)) {
// 1.创建文件夹
fs.mkdir(filePath, (err) => {
console.log('err', err)
})
}
// 2.读取文件所有文件
// 封装获取文件在所有内容文件
const getFiles = (filePath, result) => {
return new Promise((resolve, reject) => {
fs.promises.readdir(filePath, { withFileTypes: true }).then(files => {
files.forEach(file => {
result.push(file.name)
if (file.isDirectory()) {
getFiles(path.resolve(filePath, file.name), result)
}
})
files.filter(file => file.isDirectory()).length === 0 && console.log(result) && resolve(result)
})
})
}
// 深层的await return
getFiles(filePath, []).then(res => {
console.log('res', res);
})
// fs.readdir(filePath, { withFileTypes: true }, (err, files) => {
// files.forEach(file => {
// console.log('是否是个文件夹', file.isDirectory());
// console.log('是否是文件', file.isFile())
// console.log('文件名', file.name);
// })
// })
// 3.文件夹的重命名
if (!fs.existsSync('./测试文件夹/testReName')) {
fs.rename("./测试文件夹/test", "./测试文件夹/testReName", (err) => {
console.log('err', err)
})
}
// 4.文件的复制
fs.copyFile('./测试文件夹/testReName/tr01.txt', './测试文件夹/testReName/tr02.txt', (err) => {
console.log('err', err);
})
04 fs 文件描述符
js
/**
*文件描述符
并通过文件描述符来获取文件信息
*/
const fs = require('fs')
const filePath = "./abc.txt"
fs.open(filePath, (err, fd) => {
if (err) {
console.log(err)
} else {
console.log('fd', fd)
// 通过文件描述符来获取文件信息
// 在这用 总觉得是在脱裤子放屁
fs.fstat(fd, (err, stat) => {
console.log('stat', stat)
console.log('err', err)
})
}
})