NodeJS-fs文件系统目录操作

目录操作

创建

【fs.mkdir(path[, mode], callback)】参数如下:

path - 文件路径。
mode - 设置目录权限,默认为 0777。
callback - 回调函数,回调只有一个可能的异常参数
var fs = require('fs');
fs.mkdir('./1',function(err){
    console.log(err);//null
})

【fs.mkdirSync(path[, mode])】
  fs.mkdir(path[, mode], callback)的同步版本,返回undefined

var fs = require('fs');
fs.mkdirSync('./2');

删除

【fs.rmdir(path, callback)】参数如下:

path - 文件路径。
callback - 回调函数,回调只有一个可能的异常参数
var fs = require('fs');
fs.rmdir('./1',function(err){
    console.log(err);//null
})

【fs.rmdirSync(path, callback)】
  fs.rmdir(path, callback)的同步版本,返回undefined

var fs = require('fs');
fs.rmdirSync('./2');

读取

【fs.readdir(path[, options], callback)】参数如下:

var fs = require('fs');
fs.readdir('./',function(err,data){
    console.log(err);//null
    /*
    [ '.idea',
  '1',
  'a.txt',
  'go.js',
  'index.txt',
  'main.js',
  'node_modules',
  'package-lock.json',
  'package.json',
  'server.js',
  'template.pug',
     */
    console.log(data);
})

【fs.readdirSync(path[, options], callback)】
  fs.readdir(path[, options], callback)的同步版本,返回一个不包括 '.''..' 的文件名的数组

var fs = require('fs');
var result = fs.readdirSync('./');
/*
[ '.csslintrc',
  '.jshintrc',
  'a.txt',
  'dist',
  'Gruntfile.js',
  'Gruntfile1.js',
  'index.html',
  'main.js',
  'node_modules',
  'package.json',
  'src' ]
 */
console.log(result);

遍历目录

  遍历目录是操作文件时的一个常见需求。比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录。
  遍历目录时一般使用递归算法,否则就难以编写出简洁的代码。递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题。

function factorial(n) {
    if (n === 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

  上边的函数用于计算N的阶乘(N!)。可以看到,当N大于1时,问题简化为计算N乘以N-1的阶乘。当N等于1时,问题达到最小规模,不需要再简化,因此直接返回1。
  目录是一个树状结构,在遍历时一般使用深度优先+先序遍历算法。深度优先,意味着到达一个节点后,首先接着遍历子节点而不是邻居节点。先序遍历,意味着首次到达了某节点就算遍历完成,而不是最后一次返回某节点才算数。因此使用这种遍历方式时,下边这棵树的遍历顺序是A > B > D > E > C > F。

      A
     / \
    B   C
   / \   \
  D   E   F
function travel(dir, callback) {
    fs.readdirSync(dir).forEach(function (file) {
        var pathname = path.join(dir, file);
        if (fs.statSync(pathname).isDirectory()) {
            travel(pathname, callback);
        } else {
            callback(pathname);
        }
    });
}

  可以看到,该函数以某个目录作为遍历的起点。遇到一个子目录时,就先接着遍历子目录。遇到一个文件时,就把文件的绝对路径传给回调函数。回调函数拿到文件路径后,就可以做各种判断和处理。

你可能感兴趣的:(NodeJS-fs文件系统目录操作)