Node 文件系统模块

1.Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本
例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
2.异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
3.建议使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞

非阻塞:使用异步方法,读取和后续代码同时执行
阻塞:使用同步方法,等待读取完成后,再去执行后续

  1. 读取文件

Server.js:

//运行服务端,配置端口
module.exports=function(app){
    let http=require("http");
    http.createServer(app).listen(3100);
}

app.js:

  • writeHead 读取文件(一次性读取):
let fs=require("fs");

//传入回调函数返回
let app=require("./node_modules/Server/Server");
app(function(req,res){
    if(req.url!="/favicon.ico"){
        res.writeHead(200,{"Content-Type":"text/html;charset=utf-8"});
        res.write("服务器");

        //使用异步读取服务端文件
        let content="";
        let promise=new Promise(function(resolve){
            fs.readFile("./data.txt",function(err,data){
                if(err) throw err;
                //读取出来的数据为buffer  需要使用toString
                content=data.toString();
                resolve(content);  //后执行
            });
        });
        //readFile为异步读取,使用Promise异步编程实现同步读取
        promise.then(function(data){
            console.log(data);
        });
        //使用同步读取服务端文件
        let text=fs.readFileSync("./data.txt");
        console.log(text.toString());  //先执行
        res.end();
    }
});

注:路径两种写法:./data.txtE:/node/node02/bases.txt

  • read 读取文件(读取文件前需先打开,打开之后写入到缓冲区,然后从缓冲区转换出来)

优点:数据较多时,可以分段读取,第二段为第一段的结尾

(1)异步模式下读取文件的语法格式:fs.read(fd, buffer, offset, length, position, callback)

(2)参数使用说明如下:

fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。
//创建buffer  缓冲区
let buf=new Buffer.alloc(1024);
fs.open("./list/data.txt","r+",function(err,fd){
    if(err) throw err;
    console.log("文件打开完成");
    fs.read(fd,buf,0,buf.length,0,function(error,bytes){
        if(error) throw err;
        console.log(buf.slice(0,bytes).toString());
        //读取完成后,关闭文件流
        fs.close(fd,function(cerr){
            if(cerr) throw err;
            console.log("文件关闭完成");
        });
    });
 });
  1. 打开文件

(1)在异步模式下打开文件的语法格式:fs.open(path, flags[, mode], callback)

(2)参数使用说明如下:

path - 文件的路径。
flags - 文件打开的行为。具体值详见下文。
mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
callback - 回调函数,带有两个参数如:callback(err, fd)。

(3)flags 参数可以是以下值:

在这里插入图片描述

//打开文件
console.log("准备打开文件");
fs.open("./list/stu.txt","r+",function(err,fd){
    if(err) throw err;
    console.log("打开文件成功",fd); 
});
  1. 获取文件信息

(1)通过异步模式获取文件信息的语法格式:fs.stat(path, callback)

(2)参数使用说明如下:

path - 文件路径。
callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

(3)stats类中的方法有:
在这里插入图片描述

//stat  判断当前的文件是什么类型
fs.stat("./list",function(err,stat){
    if(err) throw err;
    console.log(stat.isFile(),stat.isDirectory());  //false  true
});
  1. 文件写入

(1)异步模式下写入文件的语法格式:fs.writeFile(file, data[, options], callback)
(2)参数使用说明如下:

file - 文件名或文件描述符。
data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'
callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

覆盖型写入:

//异步写入文件  
let data="我是写入的数据————更新的数据"
fs.writeFile("./list/stu.txt",data,function(err){
    if(err){
        console.log("文件写入失败");
    }
    console.log("文件写入成功");
});
//同步写入文件
let su=fs.writeFileSync("./list/stu.txt",data);
console.log(su);

追加式写入;

//追加型写入
let data="更新的数据\n"
fs.appendFile("./list/stu.txt",data,function(err){
    if(err){
        console.log("文件写入失败");
    }
    console.log("文件写入成功");
});
  1. 目录

(1)创建目录

//创建目录
fs.mkdir("./list/sub",function(err){
    if(err) throw err;
    console.log("创建目录成功");
});

(2)读取目录

//读取目录
fs.readdir("./list/sub",function(err,files){
    if(err) throw err;
    console.log(files);
});

(3)读取固定目录,判断里面的所有子目录是文件还是文件夹

fs.readdir("./list/sub",function(err,files){
    if(err) throw err;
    //读取的目录文件进行遍历
    for(let key in files){
        fs.stat("./list/sub/"+files[key],function(error,stat){
            if(error) throw err;
            console.log(stat.isFile());
            console.log(stat.isDirectory());
        });
    }
});

目录:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值