1、fs.stat()判断是文件还是目录
const fs = require('fs')
fs.stat('./html', (err, data) => {
if(err){
console.log(err);
return;
}
console.log(`是文件:${data.isFile()}`);
console.log(`是目录:${data.isDirectory()}`);
})
2、fs.mkdir()创建目录
const fs = require('fs')
fs.mkdir('./css', (err) => {
if(err){
console.log(err);
return;
}
console.log('创建成功');
})
3、fs.writeFile()创建写入文件
- 如果目录文件已经存在(index.html),将会覆盖原文件的内容
const fs = require('fs')
fs.writeFile('./html/index.html', '你好 node.js', (err) => {
if(err){
console.log(err);
return;
}
console.log('创建写入文件成功');
})
4、fs.appendFile()追加写入文件
- 如果目录文件已经存在(index.css),将会再原文件末尾追加内容
const fs = require('fs')
fs.appendFile('./css/index.css', 'html{color:red}', (err) => {
if(err){
console.log(err);
return;
}
console.log('追加文件成功');
})
5、fs.readFile()读取文件
const fs = require('fs')
fs.readFile('./css/index.css', (err, data) => {
if(err){
console.log(err);
return;
}
console.log(data); // 二进制
console.log(data.toString()); // 将 Buffer 转化为 string 类型
})
6、fs.readdir()读取目录
const fs = require('fs')
fs.readdir('./html', (err, data) => {
if(err){
console.log(err);
return;
}
console.log(data);
})
7、fs.rename()
- 可用来重命名文件
const fs = require('fs');
fs.rename('./html/index.html', './html/base.html', (err) => {
if(err){
console.log(err);
return;
}
console.log('重命名成功');
})
- 也可用来移动文件
const fs = require('fs');
fs.rename('./html/index.html', './css/index.html', (err) => {
if(err){
console.log(err);
return;
}
console.log('移动文件成功');
})
8、fs.unlink()删除文件
const fs = require('fs');
fs.unlink('./html/base.html', (err) => {
if(err){
console.log(err);
return;
}
console.log('删除文件成功');
})
9、fs.rmdir()删除目录成功
- 如果该目录下有文件,便会删除失败;得先采用fs.unlink()删除该文件
- 删除的目录必须是空目录
const fs = require('fs');
fs.rmdir('./html', (err) => {
if(err){
console.log(err);
return;
}
console.log('删除目录成功');
})
案列模块
1、 判断服务器上面有没有 upload 目录,没有的话创建目录,有就不做操作
- 上述案例或可通过第三方包来实现(mkdirp)
const fs = require('fs')
const path = './upload'
fs.stat(path, (err, data) => {
if(err){
mkdir(path);
return;
}
if(!data.isDirectory()){
// 首先删除文件,再去执行创建目录
fs.unlink(path, (err)=> {
if(!err){
mkdir(path)
}
console.log('请检测传入的数据是否正确');
})
}
})
function mkdir(dir){
fs.mkdir(dir, (err) => {
if(err){
console.log(err);
return;
}
})
}
2、找出wwwroot目录下所有的目录,并存储到数组中
const fs = require('fs');
// 1、封装一个isDir方法来判断资源是目录还是文件
async function isDir(path){
return new Promise((resolve, reject) => {
fs.stat(path, (err, status) => {
if(err){
console.log(err);
reject(err);
return;
}
if(status.isDirectory()){
resolve(true);
}else{
resolve(false);
}
})
})
}
// 2、获取根目录(wwwroot)的所有资源,并循环遍历判断目录
function main(){
let dirArr = [];
const path = './wwwroot';
fs.readdir(path, async (err, data) => {
if(err){
console.log(err);
return;
}
for(let i = 0; i < data.length; i++){
if(await isDir(path + '/' + data[i])){
dirArr.push(data[i]);
}
}
console.log(dirArr);
})
}
// 3、调用方法,获取目录数组
main();
10、fs.createReadStream()文件读取流
const fs = require('fs')
let readStream = fs.createReadStream('./data/input.txt')
let count = 0
let str = ''
readStream.on('data', (data) => {
str += data
count++
})
readStream.on('end', () => {
console.log(str)
console.log(count)
})
readStream.on('err', (err) => {
console.log(err)
})
11、fs.creatWriteStream()文件写入流
- 要想触发写入流对象的on事件,必须再前触发end事件
const fs = require('fs')
let str = ''
for(let i = 0; i < 500; i++){
str += '我是数据,我要保存起来\n'
}
let writeStream = fs.createWriteStream('./data/output.txt')
writeStream.write(str)
// 标记文件末尾
writeStream.end()
writeStream.on('finish', () => {
console.log('写入完成')
})
12、管道流(针对大文件复制、图片复制等等)
const fs = require('fs')
let readStream = fs.createReadStream('./s.jpg')
let writeStream = fs.createWriteStream('./data/sjb.jpg')
readStream.pipe(writeStream)
网友评论