Node.js 使用fs(File System)模块来操作文件,文件系统模块有两种不同的方法,分别是同步方法和异步方法。
同步和异步
Node.js 文件系统模块中的方法均有异步和同步版本,如同步读取文件内容的fs.readFileSync()
方法,异步读取文件内容的fs.readFile()
方法。
异步方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息。
在大型系统中,建议使用异步方法,同步方法将会导致进程被锁死。比起同步方法,异步方法性能更高、速度更快、而且没有阻塞。
示例:
假设有如下文件test.txt:
学互联网工作技能,上侠课岛!
同步读取文件
synchronization.js内容如下:
var fs = require("fs");
var data = fs.readFileSync('test.txt');
console.log("同步读取文件内容为:\n" + data.toString());
console.log("程序执行完毕");
启动文件:
>node synchronization.js
同步读取文件内容为:
学互联网工作技能,上侠课岛!
程序执行完毕
异步读取文件
asynchronous.js内容如下:
var fs = require("fs")
fs.readFile('test.txt', function(err,data){
if(err){
return console.error(err);
}
console.log("异步读取文件内容为:\n"+data.toString());
});
console.log("程序执行完毕");
启动文件:
>node asynchronous.js
程序执行完毕
异步读取文件内容为:
学互联网工作技能,上侠课岛!
文件系统模块的使用
要使用文件系统模块,可以使用require()方法:
var fs = require('fs');
打开文件操作
在异步模式下打开文件的语法为:
fs.open(path, flags[, mode], callback)
path -- 文件路径
flags -- 文件打开行为
mode -- 文件模式
callback -- 回调函数,带有两个参数:err和fd
示例:
var fs = require("fs");
console.log("准备打开文件")
fs.open('test.txt', 'r+', function(err, fd) {
if (err) {
return console.error(err);
}
console.log("文件打开成功!");
});
启动文件:
> node openfile.js
准备打开文件
文件打开成功!
读取文件操作
异步模式下读取文件的语法为:
fs.read(fd, buffer, offset, length, position, callback)
fd -- 文件描述符
buffer -- 数据写入的缓冲区
offset -- 缓冲区写入的写入偏移量
length -- 要从文件中读取的字节数
position -- 文件读取的起始位置,如值为null,则会从当前文件指针的位置读取
callback -- 回调函数,带有三个参数:err错误信息、bytesRead读取的字节数、buffer缓冲区对象
示例:
var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("准备打开文件");
fs.open('test.txt', 'r+', function(err, fd){
if(err){
return console.error(err);
}
console.log("文件打开成功!\n");
console.log("开始读取文件!");
fs.read(fd, buf, 0, buf.length, 0, function(err,bytes){
if(err){
console.log(err);
}
console.log("总共有读取了" + bytes + "个字节");
if(bytes > 0){
console.log("读取的内容为:" + "\n" + buf.slice(0, bytes).toString());
}
});
});
启动文件:
>node readfile.js
准备打开文件
文件打开成功!
开始读取文件!
总共有读取了42个字节
读取的内容为:
学互联网工作技能,上侠课岛!
写入文件操作
异步模式下写入文件的语法为:
fs.writeFile(file, data[, options], callback)
file -- 文件名或文件描述符
data -- 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象
options -- 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为utf8,模式为 0666,flag为'w'
callback -- 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回
示例:
var fs = require("fs");
console.log("准备写入文件");
fs.writeFile('write.txt', '这里是要写入的数据内容', function(err){
if (err) {
return console.error(err);
}
console.log("数据写入成功!");
});
启动文件,write.txt中成功被写内容:
> node writefile.js
准备写入文件
数据写入成功!
关闭文件操作
异步模式下关闭文件的语法为:
fs.close(fd, callback)
fd -- 通过fs.open()方法返回的文件描述符
callback -- 回调函数,没有参数
示例:
var fs = require("fs");
console.log("准备开文件")
fs.open('test.txt', 'r+', function(err, fd) {
if (err) {
return console.error(err);
}
console.log("文件打开成功!\n");
//关闭文件
console.log("准备关闭文件");
fs.close(fd,function(err){
if(err) {
console.log(err);
}
console.log('文件关闭成功!');
});
});
启动文件:
> node close.js
准备开文件
文件打开成功!
准备关闭文件
文件关闭成功!