Appearance
fs模块
文件系统模块
文件系统模块,允许用户访问计算机里的文件
使用__dirname代表当前文件所处目录
要使用fs模块需要先导入
javascript
const fs = require('fs');
方法 | 解释 | 格式 | 参数解释 |
---|---|---|---|
readFile | 读取指定文件中的内容 | fs.readFile(path[,options],callback) | 参数1:文件路径,参数2:读取格式,参数3:读取后的操作 |
writeFile | 写入内容到指定文件中 | fs.writeFilte(file,data[,options],callback) | 参数1:路径,参数2:想写入的数据,参数3:格式,参数4:写入后的操作 |
javascript
// 读取文件
fs.readFile('./file.txt','utf8',function(err,data){
console.log(err);
console.log(data);
})
// 写入文件
fs.writeFile('./file.txt',"hhhhh",'utf8',function(err,data){
console.log(err);
console.log(data);
})
writeFile方法写入文件时,不会创建中间路径,只会创建文件,且写入时,新内容会覆盖旧内容。
同步写入
js
fs.writeFileSync('./file.txt', 'test'); // 文件名,内容
扩展
js
fs.appendFile('./file.txt', '\r\n内容', err => { // \r\n表示换行
if(err){
console.log('写入失败');
return;
}
console.log('写入成功');
})
流式写入
与文件建立通道。适用于频繁写入的场景。
js
const fs = require('fs');
// 创建写入流对象
const ws = fs.createWriteStream('./流.txt');
ws.write('流一');
ws.write('流二');
ws.write('流三');
ws.close();
同步读取
js
const fs = require('fs');
const data = fs.readFile('./file.txt', (err,data)=>{
if(err){
console.log('读取失败');
return;
}
// data的类型是Buffer
console.log(data.toString());
})
const data2 = fs.readFileSync('./file.txt');
console.log(data2.toString());
流式读取
js
const fs = require('fs');
const rs = fs.createReadStream('./file.txt');
rs.on('data', chunk => {
console.log(chunk.length);
});
rs.on('end', () => {
console.log('读取完成');
});
移动和重命名
js
const fs = require('fs');
// 参数一、二实际上是路径
fs.rename('./file.txt', './newFile.txt', err => {
if(err){
console.log('重命名/移动失败:', err);
return;
};
console.log('重命名/移动成功');
});
fs.renameSync('./file.txt', './newFile.txt');
文件删除
js
const fs = require('fs');
// 参数实际上是路径
fs.unlink('./file.txt', err => {
if(err){
console.log('删除失败:', err);
return;
};
console.log('删除成功');
});
fs.unlinkSync('./file.txt');
如果是nodejs的14.4版本及以上可以用rm
js
const fs = require('fs');
fs.rm('./file.txt', err => {
if(err){
console.log('删除失败:', err);
return;
};
console.log('删除成功');
});
fs.rmSync('./file.txt');
文件夹操作
- 创建
js
const fs = require('fs');
fs.mkdir('./myfolder', err => {
if(err){
console.log('创建失败:', err);
return;
};
console.log('创建成功');
});
// 递归创建
fs.mkdir('./a/b/c', {recursive: true}, err => {
if(err){
console.log('创建失败:', err);
return;
};
console.log('创建成功');
});
在vscode中,文件夹紧凑展示时会显示在一行。可以将设置-Compact Folders取消勾选
- 读取
js
fs.readdir('./myfolder', (err, data) => {
if(err){
console.log('读取失败:', err);
return;
};
console.log('读取成功:', data);
});
- 删除文件夹
js
// 这种只能删除空文件夹
fs.rmdir('./folder', err => {
if(err){
console.log('删除失败:', err);
return;
};
console.log('删除成功');
})
// 递归删除(不推荐使用)
fs.rmdir('./a/b/c', {recursive: true}, err => {
if(err){
console.log('删除失败:', err);
return;
};
console.log('删除成功');
});
// rm可以胜任递归删除
fs.rm('./a/b/c', {recursive: true}, err => {
if(err){
console.log('删除失败:', err);
return;
};
console.log('删除成功');
});
查看资源状态
js
const fs = require('fs');
fs.stat('./file.txt', (err, data) => {
if(err){
console.log('查看失败:', err);
return;
};
console.log('查看成功:', data);
})
// 同步获取
let data = fs.statSync('./file.txt');
console.log('查看成功:', data);
/**
* 状态是个对象值
* size 文件体积
* birthtime 创建时间
* atime 最后访问时间
* mtime 最后修改时间
* ctime 最后修改文件状态时间
* isFile 检测是否为文件
* isDirectory 检测是否为文件夹
* */