fs模块
fs模块用于对系统文件及目录进行读写操作。
一、同步和异步
1、异步方法中回调函数的第一个参数总是留给异常参数(exception),如果方法成功完成,该参数为null或undefined。fs.readFile()
2、同步方法执行完并返回结果后,才能执行后续的代码。而异步方法采用回调函数接收返回结果,可以立即执行后续代码。fs.readFileSync()
二、readFile读取文件
var fs = require('fs');
//异步
fs.readFile('demo.txt', 'utf8', function(err,data){
console.log("异步" + data);
})
// 同步
var data = fs.readFileSync('test.txt', 'utf8')
console.log("同步" +data)
// 执行结果
同步星期二 阴雨连绵
异步星期一 天气晴朗
三、WriteFile写入文件
使用fs.writeFile(filename,data,[options],callback)写入内容到文件。
file | 文件名或文件描述符。
data | 要写入的数据
options |
encoding | 默认值: 'utf8'。
mode 默认值: 0o666。
flag 参见文件系统 flag 的支持。 默认值: 'w'。r代表读取文件,w代表写文件,a代表追加。
callback 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回
var fs = require('fs');
// 异步
fs.writeFile('demo.txt', 'abcd',{'flag': 'a'}, function(err) {
if (err) {
throw err;
}
console.log('Saved.');
// 写入成功后读取测试
fs.readFile('demo.txt', 'utf-8', function(err, data) {
if (err) {
throw err;
}
console.log(data);
});
});
// 同步
var res = fs.writeFileSync('test.txt', '00000', { 'flag': 'a' });
console.log(res + '---');
var data = fs.readFileSync('test.txt', 'utf-8');
console.log(data);
// 执行结果
undefined---
星期二 阴雨连绵0000000000
Saved.
1234567abcdabcdabcd
四、fs.open、read、fs.write读写文件
1、fs.open(path,flags,[mode],callback)方法用于打开文件,以便fs.read()读取。
path 文件路径
flags打开文件的方式
[mode] 是文件的权限(可行参数,默认值是0666)
callback 回调函数
flags值及说明如下
r :读取文件,文件不存在时报错;
r+ :读取并写入文件,文件不存在时报错;
rs :以同步方式读取文件,文件不存在时报错;
rs+ :以同步方式读取并写入文件,文件不存在时报错;
w :写入文件,文件不存在则创建,存在则清空;
wx :和w一样,但是文件存在时会报错;
w+ :读取并写入文件,文件不存在则创建,存在则清空;
wx+ :和w+一样,但是文件存在时会报错;
a :以追加方式写入文件,文件不存在则创建;
ax :和a一样,但是文件存在时会报错;
a+ :读取并追加写入文件,文件不存在则创建;
ax+ :和a+一样,但是文件存在时会报错。
2、fs.close(fd,[callback])
用于关闭文件,fd是所打开文件的文件描述符
fs.read(fd,buffer,offset,length,position,callback)
3、fd 文件描述符,必须接收fs.open()方法中的回调函数返回的第二个参数。
buffer 是存放读取到的数据的Buffer对象。
offset 指定 向buffer中存放数据的起始位置。
length 指定 读取文件中数据的字节数。
position 指定 在文件中读取文件内容的起始位置。
callback 回调函数。
4、fs.writeFile(filename, data[, options], callback)
path - 文件路径
data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(流) 对象
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8,
模式为 0666 , flag 为 'w'
callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
var fs = require('fs');
fs.open('demo.txt', `w`, function(err, fd) {
if (err) {
throw err;
}
console.log('open file success.');
const buffer = Buffer.from(JSON.stringify("shiyanlou"));
// 写入文件
fs.write(fd, buffer, 0, 6, 0, function(err, bytesWritten, buffer) {
if (err) {
throw err;
}
console.log('write success.');
// 打印出buffer中存入的数据
console.log(bytesWritten, buffer.slice(0, bytesWritten).toString());
// 关闭文件
fs.close(fd);
});
});
// 执行结果
open file success.
write success.
6 '"shiya'
fs.open('test.txt', 'r', function(err, fd) {
if (err) {
throw err;
}
console.log('open file success.');
// var buffer = new Buffer(255);
const buffer = Buffer(255);
// 读取文件
fs.read(fd, buffer, 0, 10, 0, function(err, bytesRead, buffer) {
if (err) {
throw err;
}
// 打印出buffer中存入的数据
console.log(bytesRead, buffer.slice(0, bytesRead).toString());
// 关闭文件
fs.close(fd);
});
});
// 执行结果
open file success.
10 '星期二 '
五、目录操作
1、创建目录
使用fs.mkdir(path,[mode],callback)创建目录,
path是需要创建的目录,[mode]是目录的权限(默认是0777),callback是回调函数。
var fs = require('fs');
fs.mkdir('./newtest', function(err) {
if (err) {
throw err;
}
console.log('make dir success.');
});
2、读取目录
使用fs.readdir(path,callback)读取文件目录
var fs = require('fs');
fs.readdir('./newtest', function(err, files) {
if (err) {
throw err;
}
// files是一个数组
// 每个元素是此目录下的文件或文件夹的名称
console.log(files);
});
运行结果:
[ 'demo' ]
六、读取文件详细信息
fs.stat(path,callback),path表示文件路径; callback是指回调函数,有两个参数:(err,stats),其中stats是fs.stat的实例;
实例常用方法
1.stats.isFile(): 如果是文件则返回true,否则返回false;
2.stats.isDirectiory(): 如果是目录则返回true,否则返回false;
3.stats.isBlockDevice(): 如果是块设备则返回true,否则返回false;
4.stats.isCharacterDevice(): 如果是字符设备返回true,否则返回false;
5.stats.isSymbolicLink(): 如果是软链接返回true,否则返回false;
6.stats.isFIFO(): 如果是FIFO,则返回true,否则返回false.FIFO是UNIX中的一种特殊类型的命令管道;
7.stats.isSocket(): 如果是Socket则返回true,否则返回false;
8.stats.size(): 文件的大小(以字节为单位)。
var fs = require('fs');
let mkdir = 'demo.txt';
fs.open(mkdir, 'r', (err, fd) => {
if (err) {
console.log(`open ${mkdir} file failed~`);
return false;
}
fs.fstat(fd, (err, stats) => {
if (err) {
console.log(`fstat ${mkdir} file failed~`);
return false;
}
console.log(JSON.stringify(stats));
})
})
结果如下
"dev":2399061417,
"mode":33206,
"nlink":1,
"uid":0,
"gid":0,
"rdev":0,
"ino":4503599627574561,
"size":6,
"atime":"2022-07-07T12:54:09.188Z",
"mtime":"2022-07-07T12:54:09.188Z",
"ctime":"2022-07-07T12:54:09.188Z",
"birthtime":"2022-07-06T07:38:09.578Z"