跟着网上教程走,第一篇是 process
的一些操作,我觉得除了 process.argv
获取命令行参数, process.env
获取环境变量,其他不太常用,至少我现阶段用不到,所以只是简单的测试了下,就直接到了 File System
部分。
fs 是文件操作,我之前写爬虫,以及最后的文件数据整理,都是 php 做的,现在学了 node 之后肯定尽量 node 上了。
下面我就简单记录下常用的方法,反正用法,中文文档,百度上满大街都是。
结合 File System
官网文档来学习。
Sync 后缀方法
打开文档发现每个方法都有两个,其中有一个就多了个 Sync 后缀。
什么是同步异步,事件驱动,非阻塞I/O 这些学术性的东西我就不多说了,自行搜索,这里只说他们最明显的区别。
比如 fs.rename
和 fs.renameSync
,前者是要传入回调参数,当完成或遇到错误后会执行回调函数,而 Sync 同步方法,如果遇到错误了,直接抛出,导致js中断。
fs.rename('123.txt', '321.txt', function (err) {
if (err) {
console.log(err); // 遇到错误
}
console.log('完成');
});
try {
fs.renameSync('123.txt', '321.txt');
console.log('完成');
} catch(err) {
console.log(err); // 遇到错误
}
就是这么个区别, 一个和谐报错,一个要手动 catch 错误信息。
文件读写
fs.read
, fs.write
和 fs.readFile
, fs.writeFile
, fs.appendFile
前者比较底层,需要结合 fs.open
打开文件得到文件句柄,然后基于文件句柄读写。
这不是很常用,所以直接说 fs.readFile
, fs.writeFile
, fs.appendFile
这三个方便的。
var fs = require('fs');
// 写入数据, 文件不存在会自动创建
fs.writeFile('123.txt', 'Hello Node!', function (err) {
if (err) throw err;
console.log('写入完成');
});
// 添加数据
fs.appendFile('123.txt', '添加数据,默认 utf8 格式', function (err) {
if (err) throw err;
console.log('添加完成');
});
// 读取数据
fs.readFile('123.txt', function (err, data) {
if (err) throw err;
console.log(data.toString());
});
好了,简洁明了,写入,添加,读取,都OK了。
不过我想大家也会跟我一样会有个疑问,fs.readFile
是全部载入,那如果文件很大怎么破?
而且没有按行读取,很多情况下会很麻烦。
这个就之后 Stream 部分细说了。