FS
File System文件系统(fs)
在Node中,Node通过fs模块和文件系统进行交互,该模块提供了一些标准文件访问API来打开、读取、写入文件,以及与其交互
使用fs模块,首先需要对其进行加载 let fs=require('fs')
,由于fs属于核心模块,所以就直接引入不需要加载
同步调用
同步系统会阻塞程序的执行,也就是说程序从上往下按照顺序执行,除非操作完毕,否则不会向下继续执行
打开文件
fs.openSync(path,flags,[mode])
- 该方法会返回一个文件描述符,通过对这个描述符来对该文件进行操作
- path ,打开文件的路径
- flags,打开文件的操作类型
- r ,只读
- w, 可写
- mode,设置文件操作的权限,一般不传
写入文件
fs.writeSync(fd,string,[positon,encoding])
- fd,文件操作符
- string, 输入的内容
- position,该值为数字,代表从文件的起始位置开始
关闭文件
fs.closeSync(fd)
- fd,要关闭文件的描述符
let fs=require('fs')
let make=fs.openSync('hi.txt','w')
fs.writeSync(make,"now is night")
fs.closeSync(make)
异步调用
异步文件系统不会阻塞系统程序的执行,而是在操作完成后,通过回调函数将结果返回
打开,写入,关闭文件比起同步多了一个回调函数,返回值和后续操作都在回调函数中完成
fs.open(path[, flags[, mode]], callback)
fs.write(fd, string[, position[, encoding]], callback)
fs.close(fd, callback)
//传统的回调函数,回调过多,就称之为回调地狱
let fs=require('fs')
fs.open("yibu.txt",'w',function(error,fd){
if(!error){
console.log("open success")
fs.write(fd,"now is write",function(error){
if(!error){
console.log('write success')
}
fs.close(fd,function(error){
if(!error){
console.log('close success')
}
})
})
}else{
console.log(error)
}
})
简单文件打开、写入、关闭
异步调用
fs.writeFile(file, data[, options], callback)
同步调用
fs.writeFileSync(file, data[, options])
参数
- file , 要执行操作的文件的路径,可以是绝对路径也可以是相对路径
- data, 要写入的数据
- [options](object),可选的内容,该参数是一个对象的形式
- encoding,默认值 utf-8
- mode,默认值: 0o666
- flag,默认值'w'
- 'w',写入
- 'r',只读
- 'a',在文件创建的基础之上增加数据
- callback,文件操作完成后要执行的函数
let fs=require('fs')
fs.writeFile('C:\\Users\\惟岸明雪\\Desktop\\Node\\two.txt','此步操作只为了写入上级目录文件夹中',{flag:'a'},function(err){
if(!err){
console.log('简单写入成功')
}else{
console.log(err)
}
})
流式文件写入
对于普通同步、异步,简单写入的方式都是一次性地写入数据,这样的方式需要内存预留出一定的空间,不适合过大的文件,如果按照此种方式一次性写入大型的文件,可能会导致内存不足的内容溢出,所以就有必要使用流式的文件写入法
fs.createWriteStream(path,[options]),对指定文件创建一个流,可以多次写入数据
let flu=fs.createWriteStream('three.txt')
flu.write('这是开始的一小步,')
flu.write('紧跟在一小步的后面')
flu.write('一小步后面还会更上一层楼的')
flu.end() //结束文件的流式传输
//监听流式的进程
flu.once('open',function(){
console.log('open done')
})
flu.once('close',function(){
console.log('close done')
})
文件读取
简单文件读取
简单文件读取同样是一次性地读取文件。文件的读取不仅仅局限于字符串,也可是图片或者音频
fs.readFile(path[, options], callback),简单文件的异步读取
fs.readFileSync(path[, options]) ,简单文件的同步读取
let fs=require('fs')
fs.readFile('three.txt',function(err,data){
if(!err){
fs.writeFile('copy.txt',data,function(){ //将读取的内容写入copy.txt
console.log('succ')
})
}
})
流式文件读取(相对适用于大文件的读取)
let fse=require('fs')
let fsed=fse.createReadStream('intro.txt')
let fsx=fse.createWriteStream('made.txt')
fsed.pipe(fsx)
// pipe 将可读流中的内容直接输出到可写流中