概念
全称为file system,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。它是一个服务器的基础,在Node中通过fs模块来操作文件系统。
使用
fs模块是Node的核心模块,不需要下载,直接引入即可使用
var fs = require("fs")
fs中的大部分方法都为我们提供了两个版本:
- a. 同步方法:带sync的方法
- a) 同步方法会阻塞程序的执行
- b) 同步方法通过返回值返回结果
- b. 异步方法:不带sync的方法
- a) 异步方法不会阻塞程序的执行
- b) 异步方法都是通过回调函数来返回结果的
文件写入
简单写入
同步方法:fs.writeFileSync(file, data[, options])
异步方法:fs.writeFile(file, data[, options], callback)
fs.writeFile(file, data[, options], callback)
--file:写入文件的路径+文件名
--data:写入的数据
--options:配置对象(可选参数,不常用)
--flag:打开文件要进行的操作,默认值”w“
"w":写入
"a":追加
--mode:文件的操作权限,默认值是0o666
0o111:文件可被执行的权限
0o222:文件被写入的权限
0o444:文件被读取的权限
--encoding:编码,默认值是:"utf8"
--callback:回调函数
DEMO:
let fs = require('fs')
fs.writeFile('./test.txt','写入文件测试',{
flag:'a'
},(err)=>{
if(!err){
console.log('文件写入成功')
}else{
console.log('文件写入失败')
}
})
流式写入
流式文件写入适用于一些比较大的文件,可以分多次向文件中写入内容,有效避免内存溢出的问题
fs.createWriteStream(path[, options])
--path:写入文件的位置(路径)
--options:配置对象
--flags:打开文件要进行的操作,默认值”w“
"w":写入
"a":追加
--mode:文件的操作权限,默认值是0o666
0o111:文件可被执行的权限
0o222:文件被写入的权限
0o444:文件被读取的权限
--encoding:编码,默认值是:"utf8"
--fd:文件描述符(文件索引),默认:null
--autoClose:自动关闭,当文件写入完毕后自动关闭已经打开的文件,默认:true
--emitClose:流在销毁后是否触发"close"事件。 默认:true
--start:写入开始的位置,默认:0
DEMO:
//引入fs模块
let fs = require('fs')
//创建可写流
let ws = fs.createWriteStream('./demo.txt')
//监控流状态
ws.on('open',()=>{
console.log('可写流打开了')
})
ws.on('close',()=>{
console.log('可写流关闭了')
})
//写入数据
ws.write('写入第一行数据\n')
ws.write('写入第二行数据\n')
ws.write('写入第三行数据\n')
//关闭流
ws.close()
文件读取
简单文件读取
fs.readFile(path[, options], callback)
--path:文件路径
--options:配置对象(可选参数,不常用)
--flag:打开文件要进行的操作,默认值”r“
"r":读取
--encoding:编码,默认值是:"utf8"
--callback:回调函数
DEMO:
let {readFile} = require('fs')
readFile('./test.txt',(err,buf)=>{
if(!err){
console.log(buf.toString())
}else{
console.log(err)
}
})
流式文件读取
流式文件读取默认一次读取64KB大小的内容,可以通过highWaterMark
参数更改
http://nodejs.cn/api/fs.html#fs_fs_createreadstream_path_options
DEMO:
let {createReadStream} = require('fs')
let rs = createReadStream('./test.txt')
rs.on('open',()=>{
console.log('可读流打开了')
})
rs.on('close',()=>{
console.log('可读流关闭了')
})
rs.on('data',(data)=>{
console.log(data.toString())
})