1. 读取文件
1.1 fs.readFile()
异步读取
const fs = require('fs');
fs.readFile('./hello.txt', (err, data) => {
if(err) {
console.log('出错了', err);
}else {
console.log(data, data.toString());
}
});
// <Buffer 68 65 6c 6c 6f 32> hello2
// 注意: data获得的文件内容是Buffer数据,想获得源字符串内容需要toString()方法。
1.2 fs.readFileSync()
同步读取
// 方式1
const data = fs.readFileSync('./hello.txt');
// 方式2
const data = fs.readFileSync('./hello.txt',{flag:'r',encoding:"utf-8"})
console.log(data, data.toString());
// <Buffer 68 65 6c 6c 6f 32> hello2
1.3 封装
const fs = require("fs");
function fsRead (path) {
return new Promise(function (resolve, reject) {
fs.readFile(path,{flag: 'r',encoding:"utf-8"},function(err,data){
if(err){
// console.log(err);
// 失败执行的内容
reject(err);
}else{
// console.log(data);
// 成功执行的内容
resolve(data);
}
});
})
}
2. 写入文件
2.1 fs.writeFile()
异步写入
2.1.1 基本使用
const fs = require("fs");
const data = "测试一下写入功能1";
fs.writeFile("./test1.txt", data, (err) => {
if (err) {
console.log("出错了", err);
} else {
console.log("写入成功", data);
}
});
2.1.2 参数的使用
// flag: 'w', write后面写入的会把前面的覆盖,flag: 'a',append不会覆盖,会在后面写入
fs.writeFile("./test.txt", data, { encoding: "utf8", flag: "a" }, (err) => {
if (err) {
console.log("出错了", err);
} else {
console.log("写入成功", data);
}
});
// 如果文件不存在则创建文件并写入
2.1.3 封装
const fs = require("fs");
function fsWrite(path,content){
return new Promise (function (resolve,reject) {
fs.writeFile(path,content,{flag: 'a',encoding: 'utf-8'},function (err) {
if(err){
// console.log("失败");
reject(err);
}else{
// console.log("成功");
resolve(err);
}
});
});
}
3. 读取目录
3.1 fs.readdir()
获取目录下的文件
const fs = require("fs");
fs.readdir('../03.fs', (err, files) => {
if(err) {
console.log(err)
}else {
// files是目录中文件名的数组
console.log(files);
}
})
// ['index.js', 'index1.js']
3.2 fs.rmdir
删除目录
const fs = require('fs');
// 删除test目录
fs.rmdir('./test',function () {
console.log("删除成功");
});
4. 文件流
4.1 fs.createWriteStream()
写入流
const fs = require("fs");
// 1、创建写入流
let ws = fs.createWriteStream("hello.txt",{flags:"w",encoding:"utf-8"});
// 监听文件打开事件
ws.on('open',function(){
console.log("文件打开");
});
// 监听准备事件
ws.on('ready',function(){
console.log("文件写入已准备状态");
})
// 监听文件关闭事件
ws.on('close',function(){
console.log("文件写入完成,关闭");
});
// 文件流式写入
ws.write("helloworld1!",function (err) {
if(err){
console.log(err);
}else{
console.log("内容1流入完成");
}
});
ws.write("helloworld2!",function (err) {
if(err){
console.log(err);
}else{
console.log("内容2流入完成");
}
});
ws.write("helloworld3!",function (err) {
if(err){
console.log(err);
}else{
console.log("内容3流入完成");
}
});
// 文件写入完成 end 要在最后的write后面写,不然会报错,所有的write执行完后写
ws.end(function(){
console.log("文件写入关闭");
});
// 结果
文件打开
文件写入已准备状态
内容1流入完成
内容2流入完成
内容3流入完成
文件写入关闭
文件写入完成,关闭
4.2 fs.createReadStream()
读取流
const fs = require("fs");
let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"});
rs.on('open',function(){
console.log("读取的文件已打开");
});
rs.on('close',function(){
console.log("读取流结束");
});
rs.on('data',function(chunk){
console.log("单批数据流入"+chunk.length);
console.log(chunk);
});
4.3 示例:读取hello.txt中的内容,写入hello1.txt
const fs = require("fs");
// 创建读取流,语法:fs.createReadStream(路径,【可选的配置项】)
let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"});
let ws = fs.createWriteStream('hello1.txt',{flags:'w',encoding:"utf-8"});
rs.on('open',function(){
console.log("读取的文件已打开");
});
rs.on('close',function(){
ws.end(() => {
console.log('end');
});
console.log("读取流结束");
});
// 每一批数据流入完成
rs.on('data',function(chunk){
console.log("单批数据流入"+chunk.length);
console.log(chunk);
ws.write(chunk,() => {
console.log("单批输入流入完成");
});
});
4.4 上面示例改进版,使用管道流pipe()
const fs = require("fs");
let rs = fs.createReadStream('hello.txt',{flags:'r',encoding:"utf-8"});
let ws = fs.createWriteStream('hello2.txt',{flags:'w'});
rs.on('open',function(){
console.log("读取的文件已打开");
});
rs.on('close',function(){
console.log("读取流结束");
});
// 管道读写流
rs.pipe(ws);
4.5 结论
使用管道流可以简化操作,使用更方便
最后
以上就是fs模块一些方法的使用,如有错误请指正