zoukankan      html  css  js  c++  java
  • Node.js 文件系统

    Node.js 文件系统

    参考https://www.runoob.com/nodejs/nodejs-fs.html
    Node.js提供一组类似UNIX(POSIX)标准的文件操作API。

      var fs = require('fs');
    

    异步和同步

    • fs模块中的方法均有异步同步两个版本,例如读取文件有fs.readFile()和fs.readFileSync();
    • 异步方法的最后一个参数为回调函数,回调函数的第一个参数为错误信息err;
    • 推荐使用异步方法,性能更高,速度更快,且无阻塞。
    var fs = require('fs');
    
    // 异步读取
    fs.readFile('input.txt', (err, data)=>{
    	if(err){
    		console.error(err);
    		return;
    	}
    	console.log('异步读取:'+data.toString());
    });
    
    // 同步读取
    var data = fs.readFileSync('input.txt');
    console.log('同步读取:'+data.toString());
    
    console.log('程序执行结束');
    

    结果:

      同步读取:菜鸟教程官网地址:www.runoob.com
      文件读取实例
      程序执行结束
      异步读取:菜鸟教程官网地址:www.runoob.com
      文件读取实例
    

    打开文件

      fs.open(path, flags[, mode], callback)
    
    • path:文件路径
    • flags:文件打开方式,和python类似
    • mode:设置文件权限,默认为0666(可读可写)
    • callback:回调函数,带两个参数(err, fd)

    flags参数

    • r:只读,不存在则抛异常
    • r+:读写,不存在则抛异常
    • rs:同步读
    • rs+:同步读写
    • w:写,不存在则创建
    • wx:创建并写,如果已存在则写失败
    • w+:读写,不存在则创建
    • wx+:读写,如果已存在则读写失败
    • a:追加模式打开,不存在则创建
    • ax:追加模式打开,如果已存在则追加失败
    • a+:读取追加模式打开,不存在则创建
    • ax+:读取追加模式打开,如果已存在则读取追加失败

    r写,w读,+赋予额外的读或写权限,a追加,x已存在则失败,不带x读不存在则抛异常,不带x写不存在则抛异常

    获取文件信息

      fs.stat(path, callback)
    
    • path:文件路径
    • callback:回调函数,带两个参数(err, stats),stats是fs.Stats对象
      fs.stats(path)执行后,会返回fs.Stats对象,通过该对象的方法判断文件的相关属性,例如判断是否为文件:
    var fs = require('fs');
    
    
    fs.stat('./input.txt',(err, stats)=>{
    	console.log(stats.isFile());
    });
    
    
    console.log('程序执行结束');
    

    结果:

      程序执行结束
      true
    

    第一次执行的时候提示说:

      console.log(stat.isFile());
                    ^
      ReferenceError: stat is not defined
    

    后来还去查了下文档,发现没写错,后来莫名其妙就可以了……而且我的是v14.15.2。

    stats类中的方法

    var fs = require('fs');
    
    
    console.log('准备打开文件!');
    fs.stat('input.txt', (err, stats)=>{
    	if(err){
    		return console.log(err);
    	}
    	console.log(stats);
    	console.log('读取文件信息成功!');
    });
    
    console.log('程序执行结束');
    

    结果:

      准备打开文件!
      程序执行结束
      Stats {
        dev: 3127162932,
        mode: 33206,
        nlink: 1,
        uid: 0,
        gid: 0,
        rdev: 0,
        blksize: 4096,
        ino: 2533274790624099,
        size: 60,
        blocks: 0,
        atimeMs: 1609120186409.6863,
        mtimeMs: 1609120186409.6863,
        ctimeMs: 1609120186409.6863,
        birthtimeMs: 1609120178188.6562,
        atime: 2020-12-28T01:49:46.410Z,
        mtime: 2020-12-28T01:49:46.410Z,
        ctime: 2020-12-28T01:49:46.410Z,
        birthtime: 2020-12-28T01:49:38.189Z
      }
      读取文件信息成功!
    

    写入文件

    异步写入文件

      fs.writeFile(file, data[, options], callback)
    
    • file:文件或文件描述符
    • data:待写入数据,String或Buffer对象
    • options:{encoding, mode, flag},默认为{'utf8', 0666, 'w'}
    • callback:回调函数,带有参数err,写入失败时返回

    读取文件

    异步读取

      fs.read(fd, buffer, offset, length, position, callback)
    

    使用文件描述符fd来读取文件。

    • fd:通过fs.open()返回的文件描述符
    • buffer:数据写入的缓冲区
    • offset:数据缓冲区写入的写入偏移量
    • length:要从文件中读取的字节数
    • position:读取的起始位置,如果为null则从当前文件指针处
    • callback:回调函数,带三个参数(err, bytesRead, buffer)

    关闭文件

      fs.close(fd, callback)
    

    使用文件描述符关闭文件

    • fd:通过fs.open()返回的文件描述符
    • callback:回调函数,没有参数

    截取文件

    异步截取文件

      fs.ftruncate(fd, len, callback)
    

    使用文件描述符来截取文件

    • fd:通过fs.open()返回的文件描述符
    • len:文件内容的长度
    • callback:回调函数,没有参数
      在callback中对截取后的文件进行fs.read()、fs.write()、fs.close()等操作

    删除文件

      fs.unlink(path, callback)
    
    • path:文件路径
    • callback:回调函数,没有参数

    创建目录

      fs.mkdir(path, [, options], callback)
    
    • path:目录路径
    • options:{recursive, mode},recursive,递归创建(父级目录不存在则创建),默认为false;mode,设置目录权限,默认为0777
    • callback:回调函数,没有参数

    读取目录

      fs.readdir(path, callback)
    
    • path:目录路径
    • callback:回调函数,带两个参数(err, files),files为文件数组列表

    删除目录

    异步删除目录

      fs.rmdir(path, callback)
    
    • path:目录路径
    • callback:回调函数,没有参数

    总结

    fs中的方法一般都有同步和异步两种,异步的最后一个参数通常是一个回调函数,该回调函数的参数可能有若干个或没有;
    fs.read()和fs.write()功能类似fs.readFile()和fs.writeFile(),不过提供了更底层的操作,而且是对通过fs.open()得到的文件描述符进行操作。

  • 相关阅读:
    Linux的五个查找命令
    jquery mobile图片自适应屏幕
    JS定时刷新页面及跳转页面
    JavaScript-每隔5分钟执行一次ajax请求的实现方法
    jquerymobile-可折叠内容(Collapsible content)
    MVC入门教程-视图中的Layout使用
    如何利用 _ViewStart.cshtml对页面添加代码?
    检测到有潜在危险的Request.Form值
    varchar(n)和varchar(max)有什么区别
    报错:System.Data.Entity.Infrastructure.DbUpdateException 更新条目时出错
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14200653.html
Copyright © 2011-2022 走看看