常用的莫过于对文件的增删改查以及读取文件,慢慢的一个一个说。
对文件的读取,有同步读取和异步读取,同步读取如果文件过大会造成阻塞,而异步读取不会导致IO阻塞
先上异步读取的代码
let fs = require("fs");
fs.readFile("images/bg5-4.png",function(err,data){//异步读取文件所有内容
if(!err){
console.log(data);//如果读取的是二进制文件,如图片,视频等,得到的是buffer对象。二进制数据
}else{
console.log(err);
}
})
再上同步读取的代码
let buff =fs.readFileSync("images/bg5-4.png",{flag:'a'});
//同步读取文件所有内容,后面flog 是设置文件系统标识的a代表 打开文件用于追加。
//如果文件不存在,则创建该文件。
如果发生读取失败了,还需要try {} catch (error) {}去记录错误处理错误,所以异步IO还是很有好处的。
写入文件的异步代码
let fs = require("fs");
let data = fs.readFileSync("./images/bg5-4.png");
fs.writeFile("./images/bg5.png",data,function(err){//异步写入文件,如果data是个buffer数据自动忽略encoding设置的字符类型
if(!err){
console.log("写入成功");//这里的如果成功err为null(fales),不成功则为错误信息
}
})
写入文件的同步代码
fs.writeFileSync("./images/bj6.png",data,{flag:"w"})
//与异步的api相同。但是同步中没有回调函数,返回值为undefined。
读取某文件下所有文件目录名
let fs = require("fs");
fs.readdir("./text",{encoding:"utf8",withFileTypes:false},function(err,data){
if(!err){
let brr = [];//用于存放目录名
data.forEach(item =>{
let arr= item.split(".");//遍历数据以.分割成小数组
brr.push(arr[0]);//取数组下标为0的目录名
})
fs.writeFileSync("./dats.txt",JSON.stringify(brr));//把数据写到文件中
console.log(brr);
}else{
console.log(err);
}
})
读取文件信息
var fs = require('fs');
fs.stat('dats.txt', function (err, stat) {
if (err) {
console.log(err);
} else {
// 是否是文件:
console.log('isFile(是否为文件): ' + stat.isFile());
// 是否是目录:
console.log('isDirectory(是否为目录): ' + stat.isDirectory());
if (stat.isFile()) {
// 文件大小:
console.log('size(文件大小kb): ' + stat.size);
// 创建时间, Date对象:
console.log('birth time(创建时间): ' + stat.birthtime);
// 修改时间, Date对象:
console.log('modified time(修改时间): ' + stat.mtime);
}
}
});