Node.js(内置模块fs)
fs模块(FileSystem)
【fs内置模块:实现I/O操作】
const fs=require('fs');
//所有的文件操作,都有同步和异步之分
//文件操作中,默认都是异步的, 需要同步时,在方法后加Sync
目录操作
fs.mkdir 创建目录
fs.mkdir / fs.mkdirSync:创建文件夹,有Sync的是同步创建,反之没有是异步,想要实现无阻塞的I/O操作,我们一般都是用异步操作完成要处理的事情
// fs.mkdir 创建目录
//接收参数:
//path 将创建的目录路径(名称)
//mode 目录权限(读写权限),默认0777
//callback 回调,传递异常参数err
//fs.mkdir('./css',function(err){
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('创建目录成功');
//
//})
fs.readdir 读取目录
fs.readdir / fs.readdirSync:读取文件目录中的内容
// fs.readdir读取目录 把目录下面的文件和文件夹都获取到。
//fs.readdir('html',function(err,data){
//
// if(err){
// console.log(err);
//
// return false;
// }
// console.log(data);
//
//})
// let result = fs.readdirSync('./');//=>同步
fs.readdir('./css', (err, result) => {
if (err) {
console.log(err);
return;
}
console.log(result);//=>返回的结果是一个数组
});*/
fs.rmdir 删除目录(空目录)
fs.rmdir / fs.rmdirSync:删除文件夹
// fs.rmdir 删除目录
//fs.rmdir('t',function(err){//=>删除文件夹必须保证文件夹是空的
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('删除目录成功');
//})
// ENOENT: no such file or directory, rmdir rmdir 这个方法只能删除目录
//fs.rmdir('index.txt',function(err){
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('删除目录成功');
//})
文件操作
fs.writeFile 创建写入文件
fs.writeFile / fs.writeFileSync:向文件写入内容(覆盖写入:写入的新内容会替换原有的内容)
// fs.writeFile 创建写入文件
//filename (String) 文件名称
//data (String | Buffer) 将要写入的内容,可以使字符串 或 buffer数据。
//options (Object) option数组对象,包含:
//· encoding (string) 可选值,默认 ‘utf8′,当data使buffer时,该值应该为 ignored。
//· mode (Number) 文件读写权限,默认值 438
//· flag (String) 默认值 ‘w'
//callback {Function} 回调,传递一个异常参数err。
// 如果已经存在会覆盖
//fs.writeFile('t.txt','你好nodejs 覆盖','utf8',function(err){
//
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('写入成功');
//})
fs.appendFile 追加文件
fs.appendFile / fs.appendFileSync:追加写入新内容,原有的内容还在
// fs.appendFile 追加文件
//
//fs.appendFile('t1.txt','这是写入的内容',function(err){
//
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('写入成功');
//})
//fs.appendFile('t1.txt','这是写入的内容111\n',function(err){
//
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('写入成功');
//})
fs.readFile 读取文件
fs.readFile / fs.readFileSync:读取文件中的内容
// fs.readFile 读取文件
/*
fs.readFile('./less/1.less', 'utf8', (err, result) => {
//=>不设置UTF-8编码格式,读取出来的是BUFFER格式的数据,设置后读取到的是字符串格式的数据
if (err) {
console.log(err);
return;
}
console.log(result);
});*/
//fs.readFile('t1.txt',function(err,data){
// if(err){
// console.log(err);
//
// return false;
// }
// //console.log(data);
//
// console.log(data.toString());
//
//})
fs.rename 重命名
fs.rename / fs.renameSync:重命名文件、剪切文件
// fs.rename 重命名
//1.改名 2.剪切文件
//fs.rename('html/index.html','html/news.html',function(err){
//
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('修改名字成功');
//})
//fs.rename('html/css/basic.css','html/style.css',function(err){
//
// if(err){
// console.log(err);
//
// return false;
// }
// console.log('剪切成功');
//})
fs.unlink 删除文件
fs.unlink / fs.unlinkSync:删除文件
// fs.unlink删除文件
fs.unlink('index.txt',function(err){
if(err){
console.log(err);
return false;
}
console.log('删除文件成功');
})
fs.copyFile 复制文件
fs.copyFile / fs.copyFileSync:拷贝文件到新的位置
//复制
// 本质是: 先读取,再写入
// fs.copyFile("11.txt","aa.txt",err=>{
// if(err){
// return console.log(err);
// }
// console.log("复制文件成功");
// });
//封装复制文件的方法
// function myCopyfile(src,dest){
// fs.writeFileSync(dest,fs.readFileSync(src));
// }
// myCopyfile("index.html","text.html");
fs.stat 检测是文件还是目录
fs.stat / fs.statSync:检测是文件还是目录
//fs.stat 检测是文件还是目录
//fs.stat('html',function(err,stats){
// if(err){
// console.log(err);
//
// return false;
// }
//
// let res = data.isFile();
// console.log(res);
//
// console.log('文件:'+stats.isFile());
// console.log('目录:'+stats.isDirectory());
//
//})
//
//fs.stat('index.txt',function(err,stats){
// if(err){
// console.log(err);
//
// return false;
// }
//
// console.log('文件:'+stats.isFile());
// console.log('目录:'+stats.isDirectory());
//
//})
fs.exists 判断文件或者目录是否存在
//判断文件或者目录是否存在
// fs.exists("home",exists=>{
// console.log(exists); //是否找到指定内容
// });
封装一些方法
1. 删除非空目录
//删除非空目录
/*
思路:1. 先把目录里的文件删除
2. 直到该目录成为一个空目录时,直接删除该目录
*/
function removeDir(path){
//获取到目录
let data = fs.readdirSync(path);
// ["ck","1.txt","2.html","33.txt"];
for(let i = 0; i < data.length; i++){
//循环判断目录中的每一个内容
//处理子目录的路径
let url = path + "/" + data[i];
/*
循环1 : url = "22/ck"
循环2 : url = "22/1.txt"
循环3 : url = "22/2.txt"
循环4 : url = "22/3.txt"
*/
//获取到详细信息
let stat = fs.statSync(url);
if(stat.isDirectory()){ // 如果是目录,继续查找
removeDir(url);
}else{ //文件, 删除
fs.unlinkSync(url); // path = 22
}
}
// 当循环结束后,目录成为空目录
fs.rmdirSync(path);
}
//注意事项:在使用Node.js删除文件时,不会经过回收站
// 在删除前, 切记备份!!!!(备份不要和原件放在同一路径下)
// 以免删除错误,发生不可挽救的损失
removeDir("22");
2. 判断服务器上面有没有upload目录。没有创建这个目录。
//1.判断服务器上面有没有upload目录。没有创建这个目录。 (图片上传)
//要用fs目录必须得引入fs
var fs=require('fs');
//
//fs.stat('upload',function(err,stats){
//
// if(err){ /*没有这个目录*/
// fs.mkdir('upload',function(error){
// if(error){
//
// console.log(error);
// return false;
// }
// console.log('创建成功');
// })
// }else{
// console.log('目录已经存在');
// console.log(stats.isDirectory());
// }
//
//})