在node的内核中存在一些内置的模块 这些是最基本的服务端所必要的
1:node全局环境:global类似于浏览器端的window
2:文件读取模块:fs
fs
模块同时提供了异步和同步的方法。
'use strict'; var fs = require('fs'); fs.readFile('sample.txt', 'utf-8', function (err, data) { if (err) { console.log(err); } else { console.log(data); } });
这边的回调函数定义了两个参数 一个是err 一个是data 当处理正确的时候,err是null。当错误的时候,会是一个错我的对象,也就是布尔值是true
当然如果需要去读区图片等二进制的资源的时候 就需要Buffer这个对象
'use strict'; var fs = require('fs'); fs.readFile('sample.png', function (err, data) { if (err) { console.log(err); } else { console.log(data); console.log(data.length + ' bytes'); } });
写入文件:
'use strict'; var fs = require('fs'); var data = 'Hello, Node.js'; fs.writeFile('output.txt', data, function (err) { if (err) { console.log(err); } else { console.log('ok.'); } });
这里需注意的是写入的文件可以自己创建也会自动创建 还有会覆盖之前的data数据、
当然怎么去获取文件的信息呢?
'use strict'; var fs = require('fs'); fs.stat('sample.txt', function (err, stat) { if (err) { console.log(err); } else { // 是否是文件: console.log('isFile: ' + stat.isFile()); // 是否是目录: console.log('isDirectory: ' + stat.isDirectory()); if (stat.isFile()) { // 文件大小: console.log('size: ' + stat.size); // 创建时间, Date对象: console.log('birth time: ' + stat.birthtime); // 修改时间, Date对象: console.log('modified time: ' + stat.mtime); } } });
以上就是简单粗暴的读写文件。还有一种方式就是采用流的方式 这种方式相对比较柔软
'use strict'; var fs = require('fs'); // 打开一个流: var rs = fs.createReadStream('sample.txt', 'utf-8'); rs.on('data', function (chunk) { //data表述数据可以读区了 console.log('DATA:') console.log(chunk); }); rs.on('end', function () { //end表示数据已经去读结束了 console.log('END'); }); rs.on('error', function (err) { console.log('ERROR: ' + err); });
流的方式写入文件
'use strict'; var fs = require('fs'); var ws1 = fs.createWriteStream('output1.txt', 'utf-8'); ws1.write('使用Stream写入文本数据... '); ws1.write('END.'); ws1.end(); var ws2 = fs.createWriteStream('output2.txt'); ws2.write(new Buffer('使用Stream写入二进制数据... ', 'utf-8')); ws2.write(new Buffer('END.', 'utf-8')); ws2.end();
当然我们还有一种管道流。 读取文件后直接写入
'use strict'; var fs = require('fs'); var rs = fs.createReadStream('sample.txt'); var ws = fs.createWriteStream('copied.txt'); rs.pipe(ws);