Node.js 內(nèi)置的fs模塊就是文件系統(tǒng)模塊,負(fù)責(zé)讀寫文件饰豺。和所有其他JS模塊不同的是晦闰,fs模塊同時(shí)提供了異步和同步的方法。
- 文件寫入
var fs = require("fs");
// 要寫入的文件 要寫入的內(nèi)容 a追加|w寫入(默認(rèn))|r(讀任腔摺) 回調(diào)函數(shù)
fs.writeFile("11.txt","我是要寫入的11.txt文件的內(nèi)容",{flag:"a"},function (err) {
if(err){
return console.log(err);
}else {
console.log("寫入成功");
}
})
運(yùn)行上述代碼的時(shí)候串结,會(huì)發(fā)現(xiàn)該父級(jí)文件夾下會(huì)自動(dòng)生成一個(gè)11.txt文件。
fs.appendFile("11.txt","這是要追加的內(nèi)容",function (err) {
if(err){
return console.log(err);
}else {
console.log("追加成功");
}
})
image
因?yàn)槭亲芳拥膬?nèi)容舅列,所以內(nèi)容會(huì)自動(dòng)在該文件后面
上面說(shuō)的方法都是異步操作肌割,異步操作會(huì)返回一個(gè)回調(diào)函數(shù),在回調(diào)函數(shù)里面執(zhí)行結(jié)束語(yǔ)句帐要,不然會(huì)出現(xiàn)錯(cuò)誤
而所有的同步函數(shù)把敞,都只是在異步函數(shù)后面加上Sync
var res = fs.writeFileSync("11.txt","這里面是使用同步方法寫的內(nèi)容");
console.log(res);
- 文件讀取
異步方法讀取文件
//文件讀取
fs.readFile("11.txt",function (err,data) {
if(err){
return console.log(err);
}else {
//toString() 將buffer格式轉(zhuǎn)化為中文
console.log(data.toString());
}
})
如果使用同步的方法,不需要在后面使用回調(diào)方法
var data = fs.readFileSync("11.txt");
console.log(data.toString());
- 文件修改
// 要修改名字的文件 修改后的名字 回調(diào)函數(shù)
fs.rename("11.txt","22.txt",function (err) {
if(err){
console.log(err);
}else {
console.log("修改成功");
}
})
- 文件刪除
//刪除文件
fs.unlink("11.txt",function (err) {
if(err){
return console.log(err);
}else {
console.log("刪除成功");
}
})
- 文件復(fù)制(先讀取,在復(fù)制)
異步方法
fs.readFile("22.txt",function (err,data) {
if(err){
return console.log(err);
}else{
var getData = data.toString();
fs.writeFile("33.txt",getData,function (err) {
if(err){
return console.log(err);
}else {
console.log("復(fù)制歐克");
}
})
}
})
同步方法,相比異步少了很對(duì)回調(diào)
var res = fs.writeFileSync("44.txt",fs.readFileSync("22.txt"));
console.log(res);
- 文件夾創(chuàng)建
//文件夾創(chuàng)建
//1 -- 執(zhí)行 2 -- 寫入 4 -- 讀取 7=1+2+4 以為創(chuàng)建的文件夾可執(zhí)行可讀可寫
fs.mkdir("img",0777,function (err) {
if(err){
console.log(err);
}else {
console.log("創(chuàng)建成功");
}
})
上述的權(quán)限就是在文件簡(jiǎn)介里面權(quán)限
image
- 修改文件夾權(quán)限
fs.chmod("img",0333,function (err) {
if(err){
return console.log(err);
}else {
console.log("修改ok");
}
})
image
- 修改文件夾名字榨惠,與修改文件是同一個(gè)函數(shù)
//修改文件夾名稱
fs.rename("img","image",function (err) {
if(err){
return console.log(err);
}else {
console.log("修好");
}
})
- 判斷某個(gè)文件件是否存在先巴,如果不存在創(chuàng)建,exists函數(shù)冒冬,是唯一一個(gè)回調(diào)函數(shù)中不帶err的回調(diào)函數(shù)
fs.exists("img",function (exists) {
if(exists){
console.log("該文件夾已經(jīng)存在");
}else {
fs.mkdir("img",function (err) {
if(err){
return console.log(err);
}else {
console.log("創(chuàng)建成功");
}
})
}
})
- 刪除文件夾(只能刪除空的文件夾)
fs.rmdir("img",function (err) {
if(err){
return console.log(err);
}else {
console.log("刪除成功");
}
})
- 讀取文件夾里面的信息
fs.readdir("image",function (err,data) {
if(err){
console.log(err);
}else {
console.log(data);
}
})
image
- 判斷一個(gè)位置問(wèn)價(jià)是否是文件或者是文件件
fs.stat("image",function (err,data) {
if(err){
return console.log(err);
}else {
//判斷是否是文件
if(data.isFile()){
//是文件
console.log("yes");
}else{
//是文件夾
console.log("no");
}
}
})
- 刪除非空文件夾
首先獲取到該文件夾里面所有的信息伸蚯,遍歷里面的信息,判斷是文件還是文件夾简烤,如果是文件直接刪除剂邮,如果是文件,進(jìn)入文件横侦,重復(fù)上述過(guò)程
function delFile(url) {
var data = fs.readdirSync(url);
for(var i = 0;i < data.length;i++){
// console.log(data[i])
var path = url + "/" +data[i];
console.log(path);
var stat = fs.statSync(path);
if(stat.isFile()){
fs.unlinkSync(path);
}else{
delFile(path);
}
}
fs.rmdirSync(url);
}
delFile("image");