• 【node】fs模块,文件和目录的操作


    检查文件是否存在,查询文件信息

    1. fs.stat()
     fs.stat('./server.js', function (err, stat) {
      if (stat && stat.isFile()) {
        console.log('文件存在');
      } else {
        console.log('文件不存在或不是标准文件');
      }
      console.log(stat)
    });
    
    • [x] 判断文件是否存在

    • [x] 不能判断目录

    • [x] 查询文件信息

    • [x] 打印结果:

     文件存在
    Stats {
      dev: 2052,
      mode: 33279,
      nlink: 1,
      uid: 1000,
      gid: 1000,
      rdev: 0,
      blksize: 4096,
      ino: 515557,
      size: 10,
      blocks: 1,
      atimeMs: 1536141106630.312,
      mtimeMs: 1536141106580.8394,
      ctimeMs: 1536141106580.8394,
      birthtimeMs: 1536141106580.8394,
      atime: 2018-09-05T09:51:46.630Z,
      mtime: 2018-09-05T09:51:46.581Z,
      ctime: 2018-09-05T09:51:46.581Z,
      birthtime: 2018-09-05T09:51:46.581Z }
    
    1. fs.access()
    fs.access('/server.js', function(err) {
        console.log(err ? '文件存在' : '文件不存在');
    });
    

    判断文件是否存在

    fs.access('./server.js', fs.R_OK | fs.W_OK, function(err) {
        console.log(err ? '不可操作!' : '可以读/写');
    });
    
    fs.access()用于检查到指定path路径的目录或文件的访问权限。其回调函数中有一个参数(err),如果检查失败则会出现错误参数的响应。mode是要检查的权限掩码,它可以是以下枚举值之一:
    
    • fs.F_OK - 文件是对于进程是否可见,可以用来检查文件是否存在。也是mode 的默认值
    • fs.R_OK - 文件对于进程是否可读
    • fs.W_OK - 文件对于进程是否可写
    • fs.X_OK - 文件对于进程是否可执行。(Windows系统不可用,执行效果等同fs.F_OK)

    打开文件

    fs.open('./server.js','r',function(err,fd){
    // 在这里通过文件描述fs对文件进行操作
    })
    
    fs.open()方法第一个参数是文件路径。每二个参数是标志位,标志位表示文件的打开模式。标志含义与UNIX中fopen的标识位相同:
    
    • r 打开文本文件进行读取,数据流位置在文件起始处
    • r+ 打开文本文件进行读写,数据流位置在文件起始处
    • w 如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件起始处
    • w+ 打开文件进行读写,如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件起始处
    • a 打开文件写入数据,如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件结尾处,此后的写操作都将数据追加到文件后面
    • a+ 打开文件进行文件读写,如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件结尾处,此后的写操作都将数据追加到文件后面

    关闭文件

    
    fs.open('./server.js', 'a', function (err, fd) {
        //对文件一些操作
         
        //操作完成后,关闭文件
        fs.close(fd, function(err){
        })
    })
    
    

    文件目录操作

    当我们需要对目录进行操作时,可以用node的fs模块提供的目录操作相关方法:mkidr,readdir,rmdir

    1. 使用fs.mkdir创建目录
    fs.mkdir('./test/2',function(err){
      if(err){
        console.log(err)
      }
    })
    

    目录里多了一个test文件夹
    2. 使用fs.readdir进行目录读取

    fs.readdir('./test',function(err,files){
      if (err) {
        console.log(err)
      }
      console.log(files)
    })
    

    test目录下有1和2两个文件夹控制台输出[ '1', '2' ]
    3. 使用fs.rmdir进行目录删除

    fs.rmdir('./test/2',function(err){
      if(err){
        console.log(err)
      }
    })
    

    当目录非空、路径错误、非目录时异常会发生,此时文件夹被删除了

    文件目录的重命名,和文件的删除

    1. 使用fs.rename对文件或者目录进行重命名
    fs.rename('./test','./test1',function(err){
      if(err) throw err;
      console.log('目录重命名完成')
    })
    

    将test重命名为test1

    fs.rename('./test/1/test.js','./test/1/test1.js',function(err){
      if(err) throw err;
      console.log('文件重命名完成')
    })
    
    1. 使用fs.unlink删除文件
    fs.unlink('./test/1/test1.js', function(err) {
      if (err) throw err;
      console.log('文件删除成功');
    });
    

    删除了test1.js文件

    文件的读写

    node提供read,write,readFile,createReadStream, writeFile, createWriteStream来对文件进行读写

    使用fs.writeFile()方法向./text.txt文件写入内容:

    fs.writeFile('./test.txt', '测试', function(err){ 
        if(err){
    	console.log(err);
        }
    })
    

    使用fs.readFile()方法读./text.txt文件全部内容:

    fs.readFile('./test.txt', function(err, data){ 
      //文件内容
      console.log(data.toString());
    })
    

    打印结果为'测试'

    fs模块提供了创建文件可读流与创建文件可写读的方法:fs.createReadStream()和fs. createWriteStream(),这两个方法分别分返回一个Readable Stream对象和Writable Stream对象。通过这两个对象,我们可以基于流的文件处理,在读写大文件及基于流的转接、暂停、读取等操作方面有很大的作用。

    let readStream = fs.createReadStream('./test.txt') // 创建可读流
    let writeStream = fs.createWriteStream('./server.js') // 创建可写流
    
    readStream.on('data', function(data){
      writeStream.write(data)
    })
    

    读取text.txt的内容,将其写入到server.js中,会覆盖server.js原有内容

  • 相关阅读:
    Qt图片显示
    C# 对话框使用整理
    C# AutoResetEvent 使用整理
    C++ 模板
    superset使用
    superset部署
    kafka修改topic副本数
    c# 生成自定义图片
    c# 解决Randoms伪随机重复问题
    c# 图片加水印
  • 原文地址:https://www.cnblogs.com/teemor/p/9593861.html
Copyright © 2020-2023  润新知