zoukankan      html  css  js  c++  java
  • nodejs-3.操作文件和文件夹 -- fs模块

    一.引入文件模块:

    const fs = require('fs');

    所有的文件系统操作都有异步和同步两种形式。

    • 异步形式的最后一个参数都是完成时回调函数。传给回调函数的参数取决于具体方法,但回调函数的第一个参数都会保留给异常。 如果操作成功完成,则第一个参数会是 null 或 undefined
    • 当使用同步操作时,任何异常都会被立即抛出,可以使用 try/catch 来处理异常,或让异常向上冒泡。
    二.fs模块常用的一些 API:
    1.文件操作

    (1)读取文件readFile

    let fs=require('fs');
    //1.txt  => Helloween
    fs.readFile('1.txt',function(err,data){
      if(err){
        console.log(err);
      }else{
        console.log(data);//<Buffer 48 65 6c 6c 6f 77 65 65 6e>
        console.log(data.toString());//Helloween
      }
    });

    注:buffer 内容是十六进制信息的 ASCII 码,可以先转换成十进制再对照ASCII表;当然,直接使用toString()转换即可。

    (2)写入文件writeFile

    fs.writeFile('2.txt', 'xxxxx', function(err){
       if(err){
         console.log(err);
         return;
       }
    });

    注:文件对象存在则直接把内容写入;文件对象不存在则会自动创建再写入;且写入的内容会直接覆盖原有内容。
    (3)追加文件appendFile: 会把内容往文件内的最后内容位置添加进去。

    fs.appendFile('2.txt','
    hello world',function(err){
      if(err){
         console.log(err);
         return;
       }
    });

    (4)删除文件unlink

    fs.unlink('2.txt', function(err){
      if(err){
         console.log(err);
         return;
       }
    });

    (5)复制文件: fs.copyFile(src, dest[, flags], callback)  新增于: v8.5.0,记得查看node版本

    fs.copyFile('1.txt','2.txt', function(err){
      if(err){
         console.log(err);
         return;
       }
    })

    2.文件夹操作

    (1)创建文件夹 mkdir

    fs.mkdir('./public', function(err){
      if(err){
         console.log(err);
         return;
       }
    });

    (2)删除文件夹 rmdir

    fs.rmdir('./public', function(err){
      if(err){
         console.log(err);
         return;
       }
    });

    (3)读取文件夹 readdir

    fs.readdir('../test', function(err, data){
      if(err){
        console.log(err);
      }else{
        console.log(data);//[ '1.txt', 'fs.js', 'project', 'server.js' ]
      }
    });

    3.检查文件或文件夹是否存在: fs.access() 、 fs.existsSync()

    (1) fs.access(path[, mode], callback)

    fs.access('./abc', fs.constants.F_OK, function(err){
     if(err){
       console.log(err);
       return;
     }
     console.log('存在')
    });

    (2) fs.existsSync(path) 同步,不使用回调。如果路径存在,则返回 true,否则返回 false。

    var res = fs.existsSync('./abc');
    
    console.log(res);//false

    4. 获取文件或文件夹状态信息

    (1)异步获取状态信息  fs.stat(path,callback):

    回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象,可以用来检查对象是文件stats.isFile()还是文件夹stats.isDirectory(),查看它的大小、创建时间、修改时间 ... ...

    fs.stat('./1.txt', function(err, stats){
      //回调有两个参数 (err, stats) 其中 stats 是一个 fs.Stats 对象。
       console.log(stats.isDirectory());//false
       console.log(stats.isFile());//true
       //查看文件的其他信息
       console.log(stats);
      //  Stats {
      //   dev: 275776299,
      //   mode: 33206,
      //   nlink: 1,
      //   uid: 0,
      //   gid: 0,
      //   rdev: 0,
      //   blksize: undefined,
      //   ino: 8444249301415788,
      //   size: 9,
      //   blocks: undefined,
      //   atimeMs: 1526954051821.0154,
      //   mtimeMs: 1526954068932.9944,
      //   ctimeMs: 1526954068932.9944,
      //   birthtimeMs: 1526954051821.0154,
      //   atime: 2018-05-22T01:54:11.821Z,
      //   mtime: 2018-05-22T01:54:28.933Z,
      //   ctime: 2018-05-22T01:54:28.933Z,
      //   birthtime: 2018-05-22T01:54:11.821Z 
      // }
    }); 

    (2)同步方式检测状态信息: fs.statSync(path)

    var stats = fs.statSync('1.txt');
    
    console.log(stats.isDirectory());//false
    console.log(stats.isFile());//true
    console.log(stats);
    // Stats {
    //   dev: 275776299,
    //   mode: 33206,
    //   nlink: 1,
    //   uid: 0,
    //   gid: 0,
    //   rdev: 0,
    //   blksize: undefined,
    //   ino: 8444249301415788,
    //   size: 9,
    //   blocks: undefined,
    //   atimeMs: 1526954051821.0154,
    //   mtimeMs: 1526954068932.9944,
    //   ctimeMs: 1526954068932.9944,
    //   birthtimeMs: 1526954051821.0154,
    //   atime: 2018-05-22T01:54:11.821Z,
    //   mtime: 2018-05-22T01:54:28.933Z,
    //   ctime: 2018-05-22T01:54:28.933Z,
    //   birthtime: 2018-05-22T01:54:11.821Z 
    // }

    5.文件或文件夹重命名:fs.rename(oldPath, newPath, callback)

    fs.rename('1.txt','1.txt-bak', function(err){
      if(err){
         console.log(err);
         return;
       }
    })

    6.fs操作实例

      

  • 相关阅读:
    单源最短路——SPFA算法(Bellman-Ford算法队列优化)
    A Compatible Pair
    欧拉函数知识点总结及欧拉函数打表代码(数论)
    Fafa and the Gates(模拟)
    C语言--链表基础模板
    路由器如何设置上网(TP-LINK)
    学员成绩管理系统
    Bad Cowtractors(最大生成树)
    Agri-Net(最小生成树)
    Median Weight Bead(最短路—floyed传递闭包)
  • 原文地址:https://www.cnblogs.com/xzsz/p/9071673.html
Copyright © 2011-2022 走看看