fs 属于核心模块,需要引入
let fs = require("fs");
/*
fs中的方法有两种,同步的和异步的。
同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。
异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回
如:
fs.chmod() fs.appendFile
fs.chmodSync() fs.appendFileSync()
后面带有Sync的即表示该方法为同步方法。不带的则为异步方法。
*/
异步打开文件
let fs = require("fs");
fs.open("hello.txt","w",(err,fd)=>{
if (!err){
//异步写入
console.log("success!");
fs.write(fd,"write in this",(err)=>{
if (!err){
console.log("success!");
}
//关闭文件
fs.close(fd,function (err) {
if (!err){
console.log("closed!");
}
})
})
} else {
console.log(err);
}
})
简单文件写入
// 方法签名
fs.writeFile(file, data [,options], callback)
fs.writeFileSync(file, data [,options], callback)
/*
- file [string] 写入的文件路径
- data [string] 写入的数据
- options [object] 可选的配置选项
- encoding [string] | null 默认 "utf8"
- mode [integer] 默认 = 0o666 权限设置
- flag [string] 默认 = "w" 读写设置
- r 读取文件,文件不存在则出现异常
- r+ 读写文件,文件不存在则出现异常
- rs 在同步模式下打开文件用于读取
- rs+ 在同步模式下打开文件用于读写
- w 打开文件用于写操作,如果不存在,则创建。如果存在则截断
- wx 打开文件用于写操作,如果存在则打开失败
- w+ 打开文件用于读写,如果不存在,则创建。如果存在则截断
- wx+ 打开文件用于读写,如果存在则打开失败
- a 打开文件用于追加,如果不存在则创建
- ax 打开文件用于追加,如果存在则打开失败
- a+ 打开文件用于读取和追加,如果不存在则创建
- ax+ 打开文件用于读取和追加,如果存在则打开失败
- callback [function] 回调函数,仅有一个 err 参数
*/
// example:
fs.writeFileSync("hello.txt", "write in this", {flag:"w"}, function (err) {
if (!err){
console.log("success!");
}
})
二进制流式文件读写
//创建文件可写流
fs.createWriteStream(path [,options])
- path 文件路径
- options 配置参数
let ws = fs.createWriteStream("hello.txt");
//监听打开事件
ws.once("open",()=>{
console.log("write stream opened");
})
//监听关闭事件
ws.once("close",()=>{
console.log("write stream closed");
})
//绑定事件 on() 和 once()
- on([string],callback) 绑定一个事件
- once([function],callback) 绑定一个执行一次的事件
//关闭文件流
ws.end();
//流式文件读取
fs.readFile(path[,options],callback)
//创建文件可读流
let rs = fs.createReadStream("1.jpg");
//绑定流开启事件
rs.once("open",function () {
console.log("read stream opened");
});
//绑定流关闭事件
rs.once("close",function () {
console.log("read stream closed");
//当可读流的文件读完后,把可写流也关闭
ws.end();
});
//绑定读取流事件 每次读取 65536 字节,读完为止
//将可读流的读到的内容写到可写流中
rs.on("data",function (data) {
ws.write(data);
});
//pipe() 可以将可读流的内容直接导入到可写流中
ws.pipe(rs);