[前端] nodejs 文件系统解析

前提:需要nodejs环境

 

一、目录

1.  readFileSync()

2. writeFileSync()

3. exists(path, callback)

4. mkdir(), writeFile(), readFile()

5. mkdirSync(), writeFileSync(), readFileSync()

6. readdir()

7. stat()

8. watchfile(), unwatchfile()

9. createReadStream()

10. createWriteStream()

 

二、具体章节( js脚本是写在test.js文件里的  1.txt是测试用的 )

1. readFileSync() 同步读取文件 (test.js  1.txt{changed 换行  hello world} )

 

var fs = require('fs');  // 引入文件系统模块

var text = fs.readFileSync('1.txt', function() {
    text.slit(/\r?\n/).forEach(function(line) {
        console.log(line); // 输出:changed 换行 hello world
    });
});

 

 

 

2. writeFileSync()同步写入文件( test.js  1.txt )

 

var fs = require('fs');  // 引入文件系统模块

fs.writeFileSync('1.txt', 'hello world !', 'utf-8');  // 1.txt 文件内容已换成hello world

 

 

 

3. exists(path, callback) 判断路径是否存在

 

var fs = require('fs');  // 引入文件系统模块
var util = require('util');  // 引入实用工具util模块

fs.exists('/hello', function(exists) {
    util.debug(exists ? 'hello目录存在' : 'hello目录不存在')
});

 

 

 

删除目录:

 

var fs = require('fs');  // 引入文件系统模块

fs.exists('/hello', function(exists) {
    if(exists) {
        fs.rmdir('hello');  // 删除hello目录
    } else {
        console.log('hello 目录不存在!');
    }
});

 

 

 

4. mkdir(), readFile()

生成目录:

 

var fs = require('fs');  // 引入文件系统模块

fs.mkdir('hello', 0777, function(err) {
    if(err) throw err;
});

 

 

 

读取文件:

 

var fs = require('fs');  // 引入文件系统模块

fs.readFile('1.txt', 'utf-8', function(err, data) {
    if(err) throw err;
    console.log(data);  // 读取1.txt内容
});

 

 

 

5. mkdirSync(), writeFileSync(), readFileSync() 建立目录,写入文件,读取内容同步

 

var fs = require('fs');  // 引入文件系统模块

fs.mkdirSync('hello', 0777);  // 创建目录
fs.writeFileSync('hello/2.txt', 'hello node !');  // 在目录内容创建2.txt 并写内容

var content = fs.readFileSync('hello/2.txt', 'utf-8');  // 读取目录内2.txt的内容
console.log('目录已经创建:');
console.log('2.txt的内容:' + data);

 

 

 

6. readdir() 读取目录

 

var fs = require('fs');  // 引入文件系统模块

// process.cwd() 运行node的工作目录,可以使用  cd /d 修改工作目录 cwd: change work directory
fs.readdir(process.cwd(), function (err, files) {
    if (err) {
        console.log(err);
        return;
    }

    var count = files.length;  // 返回 文件+目录的数量

    var results = {};

    files.forEach(function (filename) {
        fs.readFile(filename, function (data) {
            results[filename] = data;

            console.log(results);  // 打印:文件名和目录名

            count--;
            if (count <= 0) {
                // 数量小于等于0时的处理
            }
        });
    });
});

 

 

 

7. stat() 判断参数是一个文件还是目录

 

var fs = require('fs');  // 引入文件系统模块

/* 预定义hello目录 ( hello/sub  hello/2.txt ) */

fs.readdir('./hello', function(err, files) {
    if(err) throw err;

    console.log(files);  // 输出:hello 目录下的文件或目录

    files.forEach(function(file) {
        fs.stat('./hello/' + file, function(err, stats) {
            if(stats.isFile()) {
                console.log('%s is file ', file);
            } else if(stats.isDirectory()) {
                console.log('%s is a directory ', file);
            } else {
                console.log('stats: %s', JSON.stringify(stats));
            }
        });
    });
});

 

 

 

8. watchfile(), unwatchfile() 监听一个文件,如果该文件发生变化,就会自动触发回调函数

 

var fs = require('fs');  // 引入文件系统模块

fs.watchFile('1.txt', function(curr, prev) {
    console.log(curr.mtime);
    console.log(prev.mtime);
});

fs.writeFile('1.txt', 'changed', function(err) {
    if(err) throw err;

    console.log('file write complete !');
});

 

 

 

9. createReadStream() 创建读取操作的数据流(往往用于大型文件)

 

var fs = require('fs');  // 引入文件系统模块

/* 假如1.txt内容是hello world ! */

function readLines(input, func) {
    var remaining = '';

    input.on('data', function(data) {
        remaining += data;
        var index = remaining.indexOf('\n');
        var last = 0;

        while(index > -1) {
            var line = remaining.substring(last, index);  // substring(start, stop) 参数:开始下标,结束下标
            last = index + 1;
            func(line);
            index = remaining.indexOf('\n', last); // indexOf(searchvalue, fromindex)  参数:搜索值,从哪个下标开始搜索
        }

        remaining = remaining.substring(last);
    });

    input.on('end', function() {
        if(remaining.length > 0) {
            func(remaining);
        }
    });
}

function func(data) {
    console.log('Line: ' + data);  // 输出:hello world !
}

var input = fs.createReadStream('1.txt');
readLines(input, func);

 

 

 

10. createWriteStream() 创建一个写入数据流对象。end()结束写入操作

 

var fs = require('fs');  // 引入文件系统模块

var out = fs.createWriteStream('1.txt', {encoding: 'utf-8'});
out.write('hello node !');  // 1.txt内容已改成 hello node !
out.end();

 

 

 

三、总结

此内容是参照 http://javascript.ruanyifeng.com/nodejs/fs.html (一个牛B的前端文章)加上自己的理解重新写了一下,希望对大家有所帮助。

 

欢迎关注技术开发分享录:http://fenxianglu.cn/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天空还下着雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值