阅读背景:

node核心内置库4 fs 以及fs读取json配置文件得到js对象

来源:互联网 
!-- flowchart 箭头图标 勿删 --
//核心内置库 文件
let fs = require('fs');
//原生 readdir:只能当前目录,不寻找下级
let dirList = fs.readdirSync('./node_modules')
console.log(dirList);

//1. 内置的fs模块架构是什么样子的?
//参考答案:
// fs模块主要由下面几部分组成:
// 1) POSIX文件Wrapper(可移植性操作系统接口文件包装),对应于  操作系统的原生文件操作
// 2) 文件流 ,流读写。fs.createReadStream和fs.createWriteStream
// 3) 同步文件读写,fs.readFileSync和fs.writeFileSync
// 4) 异步文件读写, fs.readFile和fs.writeFile

//(POSIX)可移植性操作系统接口
//文件系统模块中的所有方法均有异步和同步版本。

console.log('1--------------------');
var fileReadStream = fs.createReadStream('w.js');
var fileWriteStream = fs.createWriteStream('copy.js');
fileReadStream.pipe(fileWriteStream);
//监听关闭事件得知执行完成
//(fileWriteStream.on是回调函数, 监听到close事件时被触发)
fileWriteStream.on('close', function() {
    console.log('移动成功!');
})

//---------------------
console.log('2--------------------');
//fs.readFile(file[, options], callback)
//异步文件读写

//默认获取二进制数据。参数设置为utf8将获取文本数据
fs.readFile('w.js', 'utf8', function (err, data) {
    console.log('2异步文件读begin--------------------')
    if (err) throw err;
    console.log(arguments);
    console.log('2异步文件读写end--------------------')
});
//---------------------
console.log('3FileList--------------------');
//fs.readFileSync(file[, options])
//file 不是文件夹,而是文件。
//无回调函数, 同步文件读写
let fileList = fs.readFileSync('w.js','utf8');
console.log(fileList + '   同步文件读写');



//在列举一些常用的实例:

//  复制代码 代码如下:

// 删除文件
// fs.unlink('bb.txt', function(){
//     console.log('success') ;
// }) ;
// // 修改文件名称
// fs.rename('bb.txt','bigbear.txt',function(err){
//     console.log('rename success') ;
// });
// 查看文件状态  异步函数,非阻塞,放入队列 按照队列顺序执行
fs.stat('test.txt', function(err, stat){
    console.log(stat);
});
// 判断文件是否存在  异步函数,非阻塞,放入队列 按照队列顺序执行
fs.exists('bb.txt', function( exists ){
    console.log( exists ) ;
}) ;

//====================================================
console.log('4-------第一种方式怎么读取json配置文件?beghin');
//2. 怎么读取json配置文件?
//参考答案:
// 主要有两种方式,第一种是利用node内置的require('data.json')机制,直接得到js对象;
// 第二种是读入文件入内容,然后用JSON.parse(content)转换成js对象.
// 二者的区别是require机制情况下,如果多个模块都加载了同一个json文件,那么其中一个改变了js对象,
// 其它跟着改变,这是由node模块的缓存机制造成的,只有一个js模块对象;
// 第二种方式则可以随意改变加载后的js变量,而且各模块互不影响,因为他们都是独立的,是多个js对象.

//第一种方式
//加载json文件时要加入文件路径名字
var datajson = require('./data.json');
console.log(datajson);
console.log(datajson.name);
console.log(datajson.dependencies);

var datajson2 = require('./data.json');
console.log(datajson2.name);

datajson2.name = "doudizhu";
console.log(datajson.name);
console.log('4-------第一种方式怎么读取json配置文件?end');

console.log('4-------第二种方式怎么读取json配置文件?begin');
//第二种方式
//var fsio = fs.createReadStream('./data.json'); error
var fsio = fs.readFileSync('./data.json'); //读入文件入内容 同步执行阻塞

let datajson3 = JSON.parse(fsio);
console.log(datajson3);
datajson3.name = 'the secoond type';
console.log(datajson3);

//var fsio1 = fs.createReadStream('./data.json');
var fsio1 = fs.readFileSync('./data.json');
JSON.parse(fsio1);

console.log("====异步读取文件====");
//默认获取二进制数据。参数设置为utf8将获取文本数据
fs.readFile('./data.json', 'utf8', function (err, data) {
    console.log('读取json异步文件读begin--------------------')
    if (err) throw err;
    console.log(data);
    console.log('读取json异步文件读写end--------------------')
});

console.log('4-------第二种方式怎么读取json配置文件?end');

//================================================================
console.log('5------------------------Node.Js 文件或目录监视begin');
//5. fs.watch和fs.watchFile有什么区别,怎么应用?
//    参考答案: 二者主要用来监听文件变动.fs.watch利用操作系统原生机制来监听,可能不适用网络文件系统;
// fs.watchFile则是定期检查文件状态变更,适用于网络文件系统,但是相比fs.watch有些慢,因为不是实时机制.

//1.fs.watchFile(filename, [options], listener);
//对文件进行监视,并且在监视到文件被修改时执行处理
/**
 * filename, 完整路径及文件名;
 * [options], persistent true表示持续监视,不退出程序;interval 单位毫秒,表示每隔多少毫秒监视一次文件
 * listener, 文件发生变化时回调,有两个参数:curr为一个fs.Stat对象,被修改后文件,prev,一个fs.Stat对象,表示修改前对象
 */
//var fs = require('fs');
var path = require('path');
var file1 = path.resolve('/test1/one.txt');
//监视文件
//1.当第一次创建监视器的时候,如果文件不存在,监视器回调函数会触发一次
fs.watchFile(file1, {
    interval: 20
}, function(curr, prev) {
    if (Date.parse(prev.ctime) == 0) {
        console.log('文件被创建');
    } else if (Date.parse(curr.ctime) == 0) {
        console.log('文件被删除');
    } else if (Date.parse(curr.mtime) != Date.parse(prev.mtime)) {
        console.log('文件有修改');
    }
});
var file2 = path.resolve('/test1/two.txt');
fs.watchFile(file2,  function(curr, prev) {
    console.log('这是第二个watch,监视文件有修改');
});
console.log('5------------------------Node.Js 文件或目录监视end');

//核心内置库 文件



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: