node.js — 文件系统(File System)【学习笔记】

node.js — 文件系统(File System)

基本概念
  • 学习fs木块的API
  • 使用fs模块前,需要引入cost fd=require(‘fs’);
特点
  • 提供同步异步两种选择
  • 同步导致堵塞
  • 异步操作完成通过回调返回结果

同步与异步

同步写入-- fs.writeFileSync()
let fs = require('fs')

//同步打开文件
let fd = fs.openSync('text1','w')
//打印出标识id
console.log(fd);

//写入内容
let str="小廖,你好"
fs.writeSync(fd,str)

//退出文件
fs.closeSync(fd)

同步相当于 点汉堡 =》制作汉堡=》 汉堡制作好了之后,你拿走了 => 下一位用户继续点汉堡

整个事件完成之后再轮到下一个开始

异步写入 – fs.writeFile()

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

var fs = require("fs");

// 异步读取
fs.readFile('input.txt', function (err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("异步读取: " + data.toString());
});

【异步方法的优点:比同步方法的性能更高,速度更快,而且没用堵塞】

异步:点汉堡 =》旁白下一位等待 =>下一位继续点汉堡 =》 旁边等待,汉堡好了之后,会自动叫你领取

打开文件

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

flags 参数可以是以下值:

Flag描述
r以读取模式打开文件。如果文件不存在抛出异常。
r+以读写模式打开文件。如果文件不存在抛出异常。
rs以同步的方式读取文件。
rs+以同步的方式读取和写入文件。
w以写入模式打开文件,如果文件不存在则创建。
wx类似 ‘w’,但是如果文件路径存在,则文件写入失败。
w+以读写模式打开文件,如果文件不存在则创建。
wx+类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
a以追加模式打开文件,如果文件不存在则创建。
ax类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
a+以读取追加模式打开文件,如果文件不存在则创建。
ax+类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

文件写入流

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

let fs = require('fs')
//创建写入流
let ws = fs.createWriteStream('text3.txt');

//监听通道打开 
ws.once('open',()=>{
    console.log("通道打开")
    ws.write("你好,我是你爹1") 
    ws.write("你好,我是你爹2") 
    ws.write("你好,我是你爹3")
    //写入结束
    ws.end() 
})

//监听通道关闭
ws.once('close',()=>{
    console.log('通道关闭')
})

文件读取流

异步模式下读取文件的语法
fs.read(fd, buffer, offset, length, position, callback)
参数说明
  • fd - 通过 fs.open() 方法返回的文件描述符。
  • buffer - 数据写入的缓冲区。
  • offset - 缓冲区写入的写入偏移量。
  • length - 要从文件中读取的字节数。
  • position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
  • callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。
实例
//文件读取

let fs = require('fs')

fs.readFile('text2.txt',(err,data)=>{
    if(!err){
        //这里如果不加toString()则会以二进制形式打印输出
        console.log(data.toString())
    }else{
        console.log('err:',err)
    }
})

console.log('读写完成')

删除文件

语法
fs.unlink(path,callback)
参数说明
  • path - 文件路径。
  • callback - 回调函数,没有参数。
实例
let fs = require('fs')

//删除文件
fs.unlink('text2.txt',(err)=>{
    if (err) {
        console.log(err)
    }else{
        console.log('删除成功')
    }
})

读取目录下的所有文件

语法
fs.readdir(path,callback)
参数说明
  • path - 文件路径。
  • callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。
实例
    fs.readdir('./',(err,files)=>{
        if(err){
            console.log(err)
        }else{
            console.log(files)
        }
    })

输出是一个数组

文件与文件夹的创建与删除

创建文件
语法

fs.mkdir(path,callback)

  • path - 文件路径。
  • callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。
实例
//创建文件夹
fs.mkdir('./img',(err)=>{
    if(err){
        console.log(err)
    }else{
        console.log("创建成功")
    }
})
删除文件

删除文件夹

如果该文件夹下还有其他文件,运行则会显示报错无法删除

这样只能删除空的文件夹,而不能删除内容

fs.rmdir('./img',(err)=>{
    if(err){
        console.log(err)
    }else{
        console.log("删除成功")
    }
})
删除文件夹+文件
function delDir(dirPath){
    var filesArr = fs.readdirSync(dirPath)
    for(var i in filesArr){
        //定义一个文件的路径
        var filePath = dirPath + '/' + filesArr[i];

        //读取文件信息
        var stat = fs.statSync(filePath)
        //判断是文件还是目录
        if(stat.isFile()){
            fs.unlinkSync(filePath)
        }else if(stat.isDirectory()){
            //如果是目录的话就是递归删除目录文件
            //递归调用自己    
            delDir(filePath)
        }
    }

    //删除完文件之后,就删除本身空目录
      fs.rmdirSync(dirPath)
}

//调用函数
delDir('./img')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值