Node.js-文件系统之目录操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012054869/article/details/82115960

6. 目录操作

(1)创建目录

  • Fs.mkdir()
  • Fs.mkdirSync()

例子:创建单层目录

const fs = require('fs');
// 创建目录
// 一,创建单层目录
 fs.mkdir('./file',function (err) {
    if(err) throw err;
    console.log('目录创建成功');
 })

例子二:创建多层目录

const fs = require('fs');
const path = require('path');
//创建多层目录,递归异步操作
 const createDir = function (dirPath,callback) {
    // 判断目录是否已经存在
    fs.access(dirPath,function (err) {
        if(err){
            // 递归调用
            // 先创建前面的部分,再通过 fs.mkdir()补齐后面的
            // console.log(path.dirname('a/b/c/d/e'));//直接把最后一部分去掉了
            createDir(path.dirname(dirPath),function () {
                // 再创建最后一个
                fs.mkdir(dirPath,callback);
            });
        }else {
            callback(new Error(dirPath+'已经存在'));
        }
    })
}
createDir('a/b/c/d',function (err) {
    if(err) throw err;
    console.log('目录创建成功');
})

(2)读目录

  • Fs.readdir()
  • Fs.readdirSync()

例子:获取目录,并打开网址显示页面上

// 导入文件系统
const fs = require('fs');
const http = require('http');

// 获取目录,并打开网址显示页面上
//创建服务
http.createServer(function (req, res) {
    res.writeHead(200, {'content-type': 'text/html;charset=utf-8'});
    res.write('<ul>');
    fs.readdir('./../../admin', function (err, files) {
        //遍历
        files.forEach(function (file) {
            //查看目录状态
            let state = fs.statSync('./../../admin'+file);
            let type = state.isFile() ? "file" : "directory";
            res.write('<li>' + file + type + '</li>')
        });
        res.write('</ul>');
    })

}).listen(1314, function () {
    console.log('create 1314 success');
})

(3)删除目录

  • Fs.rmdir()
  • Fs.rmdirSync()

例子一:只删除空目录

const fs = require('fs');
//删除,只能删除空目录
 fs.rmdir('a/b/c/d',function (err) {
    if(err) throw err;
    console.log('目录删除成功')
})

例子二:删除目录或者文件,删除目录中所有文件

const fs = require('fs');
const path = require('path');
// 删除目录或者文件,删除目录中所有文件
const removeDir = function (dirPath, callback) {
    // 判断类型
    fs.stat(dirPath,function (err,state) {
        if (err) return callback(err);
        // 判断是否是目录
        if(state.isDirectory()){
            // 读取目录
            fs.readdir(dirPath,function (err,files) {
                if (err) return callback(err);
                // 如果是空目录
                if(files.length<1){
                    fs.rmdir(dirPath,callback);
                    return;
                }
                // 遍历
                let count = 0;
                files.forEach(function (file) {
                    removeDir(path.join(dirPath,file,function () {
                        if(++ count === files.length){
                            fs.rmdir(dirPath,callback);
                        }
                    }))
                })
            })
        }else {
            // 文件
            fs.unlink(dirPath,callback);
        }
    })
}
removeDir('a',function (err) {
    if(err) throw err;
    console.log('目录删除成功');
})

猜你喜欢

转载自blog.csdn.net/u012054869/article/details/82115960