前言
fs文件系统用于对系统文件及目录进行读写操作,本文将详细介绍nodejs中的文件系统。
概述
文件 I/O 是由简单封装的标准 POSIX 函数提供的。 通过 require(‘fs’) 使用该模块。 所有的方法都有异步和同步的形式。
异步形式始终以完成回调作为它最后一个参数。 传给完成回调的参数取决于具体方法,但第一个参数总是留给异常。 如果操作成功完成,则第一个参数会是 null 或 undefined。
//异步示例
var fs = require('fs');
fs.unlink('/tmp/hello', function(err){
if (err) throw err;
console.log('successfully deleted /tmp/hello');
});
当使用同步形式时,任何异常都会被立即抛出。 可以使用 try/catch 来处理异常,或让它们往上冒泡
//同步示例
var fs = require('fs');
fs.unlinkSync('/tmp/hello');
console.log('successfully deleted /tmp/hello');
异步方法不保证执行顺序。 所以下面的例子容易出错
fs.rename('/tmp/hello', '/tmp/world', function(err){
if (err) throw err;
console.log('renamed complete');
});
fs.stat('/tmp/world', function(err, stats){
if (err) throw err;
console.log('stats: ${JSON.stringify(stats)}');
});
fs.stat 可能在 fs.rename 之前执行。正确的方法是把回调链起来
fs.rename('/tmp/hello', '/tmp/world', function(err){
if (err) throw err;
fs.stat('/tmp/world', function(err, stats){
if (err) throw err;
console.log('stats: ${JSON.stringify(stats)}');
});
});
推荐开发者使用这些函数的异步版本。 同步版本会阻塞整个进程,直到它们完成(停止所有连接)
底层操作
1、打开文件【fs.open(path, flags[, mode], callback)】
path <String> | <Buffer>
flags <String> | <Number>
mode <Integer> 设置文件模式(权限和 sticky 位),但只有当文件被创建时才有效。默认为 0666,可读写
callback <Function> 该回调有两个参数 (err错误, fd文件标识,与定时器标识类似)
2、读取文件【fs.read(fd, buffer, offset, length, position, callback)】
fd <Integer> 通过 fs.open() 方法返回的文件描述符
buffer <String> | <Buffer> 数据将被写入到buffer
offset <Integer> buffer中开始写入的偏移量
length <Integer> 指定要读取的字节数(整数)
position <Integer> 指定从文件中开始读取的位置(整数)。 如果position为null,则数据从当前文件位置开始读取
callback <Function> 回调有三个参数 (err, bytesRead, buffer)。err为错误信息,bytesRead表示读取的字节数,buffer为缓冲区对象
3、写入文件【fs.write(fd, buffer, offset, length[, position], callback)】
fd <Integer> 文件标识
buffer <String> | <Buffer> 要将buffer中的数据写入到文件中
offset <Integer> buffer对象中要写入的数据的起始位置
length <Integer> length是一个整数,指定要写入的字节数
position <Integer> 指定从文件开始写入数据的位置的偏移量。 如果 typeof position !== 'number',则数据从当前位置写入
callback <Function> 回调有三个参数(err, written, buffer),其中written指定从buffer写入了多少字节
4、关闭文件【fs.close(fd, callback)】
一个文件被操作后,要及时将该文件关闭
fd - 通过 fs.open() 方法返回的文件描述符。
callback - 回调函数,没有参数。