fs模块
fs文件系统用于对系统文件及目录进行读写操作。
文档地址:fs
常用方法:
const fs = require('fs');
// 检测目录或文件
fs.stat('./package.json', (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(`是文件:${data.isFile()}`);
console.log(`是目录:${data.isDirectory()}`);
})
// 创建目录(已存在,不可重复创建)
// mkdir(path[, mode], callback) mode 权限, 默认777
// fs.mkdir('./css', (err, data) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('success');
// })
// 创建写入文件(已存在,会覆盖)
// fs.writeFile('./html/index.html', `<html><head></head><body></body></html>`, (err) => {
// if (err) {
// console.log(err);
// return;
// }
// console.log('success');
// })
// 追加文件(默认存在会继续追加)
// 'a+': 打开文件用于读取和追加。 如果文件不存在,则创建该文件。
// 'ax+': 类似于 'a+',但如果路径存在,则失败。
fs.appendFile('./css/index.css', 'body{color:red}', { flag: 'ax+' }, (err) => {
if (err) {
console.log(err);
return;
}
console.log('append success');
})
// 读取文件 // 'w+': 打开文件用于读取和写入。 如果文件不存在则创建文件,如果文件存在则截断文件。{ flag: 'wx+' },
fs.readFile('./html/index.html', (err, data) => {
if (err) {
console.log(err);
return;
}
// console.log('data: ', data);// Buffer
console.log(`文件信息:${data}`);
})
// 读取目录
fs.readdir('../fs', (err, data) => {
if (err) {
console.log(err);
return;
}
console.log('目录信息: ', data);
console.log(`目录信息:${data}`);
})
// 重命名 / 移动文件
fs.rename('./html/bb.html', './css/aa.html', (err) => {
if (err) {
console.log(err);
return;
}
console.log('rename success ');
})
// 删除目录(没有目录会出错)
fs.rmdir('./aaa', (err) => {
if (err) {
console.log(err);
return;
}
console.log('rmdir success ');
})
// 删除文件(没有文件会出错))
fs.unlink('a.txt', (err) => {
if (err) {
console.log(err);
return;
}
console.log('文件已被删除');
});
笔记代码:
- 文件写入:
fs
open/openSync(同步写入)
write/writeSync
close/closeSync
简单文件写入:
fs.wirteFile(filepath, data [, options], callback)
fs.wirteFileSync(filepath, data [, options])
options规则:
a 追加;a+ 读取追加,没有创建;
r+ 读写;rs+同步模式下读写;
w+ 读写截断(覆盖),没有创建; wx+ 读写,存在则打开失败。
fs.wirteFile("hello.txt", "hello文本", { flag: a }, function(err) { console.log( '追加文本。。。' ) } )
流式文件写入:
var ws = fs.createWriteStream(path, [, options])
ws.once ( 'open', 'function(){ })
ws.once ( 'close', 'function(){ })
ws.write('sssssss');
ws.write('ssssssssssssssaaa');
ws.end();
- 文件读取:
简单: fs.readFile(path [, options], callback) // 回调函数返回buffer数据
fs.readFileSync(path [, options])
流式:大文件,可分多次将文件读取到内存(一次读65536字节)
var rs = fs.createReadStream(path, [, options])
ws.once ( 'open', 'function(){ })
ws.once ( 'close', 'function(){ })
1,// 若要读取可读流的数据,必须为可读流绑定data事件,然后自动读取
rs.on('data', function(data) { console.log('data为读取到的数据': data); })
2,var ws = fs.createWriteStream(path, [, options])
rs.pipe(ws);
流式操作:
// 流式操作
// createReadStream
const fs = require('fs');
let crs = fs.createReadStream('./package.json');
let data = '';
let count = 0;
crs.on('data', (chunk) => {
data += chunk;
count++;
})
crs.on('end', () => {
console.log(data);
console.log(count);
})
crs.on('error', (err) => {
console.log(err);
})
// createWriteStream
let cws = fs.createWriteStream('./1.txt');
let str = '';
for (let i = 0; i < 100; i++) {
str += '我是代谢的文件..'
}
cws.write(str);
cws.end(); // 标记文件末尾
cws.on('finish', () => {
console.log('success');
})
// 管道:rs->ws
let rs = fs.createReadStream('./package.json');
let ws = fs.createWriteStream('./pipe.txt');
rs.pipe(ws);