node.js-fs读取文件与写入文件示例demo

代码示例:
下方的示例是同步和异步的不同操作,注释的为异步的,未注释的是同步的操作
操作内容为,打开一个文件,若文件夹中没有,会自己创建,然后第二个参数是flag,可以选择写’w’或者读’r’等其他操作,但是若写了‘r’,要读取这个文件但是没有时会报错 r: ENOENT: no such file or directory, open ‘hao1.txt’

//引入fs模块
let fs = require('fs');
//同步打开demo1.txt文件,写入得操作,在这里,若没有demo1文件,会自己创建
let fd = fs.openSync('demo1.txt','w');

//这是异步打开文件的操作,同样执行写的操作,与同步不同是有回调函数,err是失败,fd是代表所打开的文件,在node.js中异步操作是没有返回值一说的,若想在打开的文件成功后,进行下一步操作,比如写入并关闭文件,是必须放在打开文件的回调函数中的,否则就会报错
// fs.open('demo1.txt', 'w', function (err, fd) {
//     if (err) {
//         console.log(err)
//     } else {
//         console.log('chulaioloohdfiduh')
//         // console.log(fd)
			//在打开文件成功后写入文件
//         fs.writeFile(fd, 'gfglSJbfSBdjabsdhasdasdbajsgdjssdsdhsdkfdkfkdksfdfdhkdhfdk', (err) => {
//             if (err) throw err;
//             console.log('保存了')00
				//写完文件关闭这个文件,异步执行,有回调函数
//             fs.close(fd,  (err) => {console.log(222)})
//         });
//     }
// });
 
//同步写入文件
fs.writeFileSync(fd,'我只愿面朝大海,春暖花开');
//写入文件后关闭这个打开的文件
fs.closeSync(fd);

读取文件异步操作的示例代码:

//引入fs模块
let fs = require('fs');,
//读取wenjian.text文件,没有的话会报错,异步请求有callback,err是错误,data是读取的二进制数据
fs.readFile('wenzi.text',(err,data)=>{
    if(!err){    //如果成功调用下列代码
        console.log(data)
        console.log(data.toString())
    }else{    //失败就抛出异常,具体代码操作按实际需求来写
        throw err
    }
})

demo需求:读取本地图片文件,然后写入到当前文件的同一路径下

//引入fs模块
let fs = require('fs');,

//首先读取图片文件,异步操作,有回调函数
fs.readFile('d:\\Users\\Administrator\\Desktop/1.png', (err,data)=>{
    //如果成功的话
    if(!err){
    //将读出的data数据,写入当前目录下,并起名为img.png
        fs.writeFile('./img.png',data,(err)=>{
            if(err){
            	throw err
            }else{
                console.log(data)
            }
        })
    }else{
        throw err
    }
})

创建读取流
首先,要了解流的作用:在于文件太大,读取太久,或者上传太久,影响体验,其实是影响代码的运行,变相增加运行时间;读取操作会放在内存中,若无其他操作会立即释放,但若文件过多或过大,会占用内存。容易宕机,所以Stream流是很有必要使用的

//引入fs模块
let fs = require('fs');
//创建一个读取流
var wl  = fs.createReadStream('test1.txt')
//监听open读取流打开的事件
wl.once('open',()=>{
    console.log('创建读取流....')
})
//监听读取流.关闭的事件
wl.once('close',()=>console.log('关闭读取流....'))
console.log(wl)
//关闭读取流
wl.end()

读取流和写入流的使用,demo要求:读取一个本地的mp3文件,然后写入到当前路径下的test.mp3


//创建读取流,读取一个本地的mp3文件,然后写入到当前路径下的test.mp3
//引入fs模块
let fs = require('fs');
//创建一个读取流
var rs = fs.createReadStream('D:/Program Files/腾讯游戏/英雄联盟/TCLS/music/sound.mp3')
//创建一个写入流
var ws = fs.createWriteStream('test.mp3')
//监听open读取流打开的事件
rs.once('open', ()=>{
    console.log('读取stream打开了')
})
//监听读取流关闭的事件
rs.once('close', ()=>{
    console.log('duqu读取stream 关闭了了')
})
//监听写入流打开的事件
ws.once('open', ()=>{
    console.log('写入stream打开了')
})
//监听写入流关闭的事件
ws.once('close', ()=>{
    console.log('写入stream 关闭了了')
})
//第一个data是读取流的data事件,后面的data是读取流读到的信息
rs.on('data',(data)=>{
    console.log(data)
    ws.write(data)    //将读取来的data数据写入到写入流中
})

还有一种方法,是对上面读写流的一种封装,rs有个方法叫pipe();运行效果与上面相同,我们可以读写一个mp4文件,详见代码:

// 引入模块
let fs = require('fs');

// 创建读入流
var rs = fs.createReadStream('C:\\Users\\admin\\Desktop\\img\\test.mp4');
var ws = fs.createWriteStream('liu.mp4');

// 创建管道  ,直接把ws放进去,就会看到文件夹出现了一个mp4
rs.pipe(ws);

猜你喜欢

转载自blog.csdn.net/zoepriselife316/article/details/87568630