[前端] 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的前端文章)加上自己的理解重新写了一下,希望对大家有所帮助。

谢谢关注!


你可能感兴趣的:(nodejs,文件系统)