一、读写文件(同步,异步)
var file=require('fs');
//同步方法
var text1=fs.readFileSync('text1','utf8'); //读取文件名是text1下的内容
fs.writeFileSync('text2',text2,'utf8'); //把text1的内容写入新建的文件名是text2中
//异步方法
var text1=fs.readFile('text1','utf8',function(data){
//
})
二、创建和删除目录
var fs=require('fs');
fs.mkdir('starf',function(){
fs.readFile('a.text','utf8',function(err,data){
fs.writeFile('./starf/c.text',data,function(){
console.log("success")
})
})
})
三、async和await
async function asyncFn(){
await setTimeOut(x=>console.log(1))
await setTimeOut(x=>console.log(2))
await setTimeOut(x=>console.log(3))
}
asyncFn() //1,2,3
- async用来申明里面包裹的内容可以进行同步的方式执行,await则是进行执行顺序控制,每次执行一个await,程序都会暂停等待await返回值,然后再执行之后的await。
- await后面调用的函数需要返回一个promise,另外这个函数是一个普通的函数即可,而不是generator。
- await只能用在async函数之中,用在普通函数中会报错。
- await命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try...catch 代码块中。
四、 流和管道
NodeJs中关于流的操作被封装到了Stream模块中,这个模块也被多个核心模块所引用。
const stream = require('stream');
在 NodeJS 中对文件的处理多数使用流来完成
- 普通文件
- 设备文件(stdin、stdout)
- 网络文件(http、net)
注:在NodeJs中所有的Stream(流)都是EventEmitter的实例
Example:
1.将1.txt的文件内容读取为流数据
const fs = require('fs');
// 创建一个可读流(生产者)
let rs = fs.createReadStream('./1.txt');
通过fs模块提供的createReadStream()可以轻松创建一个可读的文件流。但我们并有直接使用Stream模块,因为fs模块内部已经引用了Stream模块并做了封装。所以说 流(stream)在 Node.js 中是处理流数据的抽象接口,提供了基础Api来构建实现流接口的对象。
2.创建可写流(消费者)处理可读流
将1.txt的可读流 写入到2.txt文件中 这时我们需要一个可写流
const fs = require('fs');
// 创建一个可写流
let ws = fs.createWriteStream('./2.txt');
// 通过pipe让可读流流入到可写流 写入文件
rs.pipe(ws);