【node】nodejs读取文件与文件传输的简单实现

一、 读取文件简单实现

const fs = require('fs')
const path = require('path')

const fileName = path.resolve(__dirname, 'data.log')

// 读取文件内容
fs.readFile(fileName, (err, data) => {
    if(err){
        console.log(err)
        return
    }

    console.log(data)  // 二进制数据
    console.log(data.toString()) 
})

// 写入文件
const content = 'new content \n'
const opt = {
    flag: 'a'   // 追加写入, 覆盖用 ‘w’
}
fs.writeFile(fileName, content, opt, (err) => {
    if(err){
        console.log(err)
    }
})

// 判断文件是否存在
fs.exists(fileName, (exists) => {
    if(err){
        console.log(err)
    }
})

二、文件流几个场景简单实现

  1. 标准输入输出
process.stdin.pipe(process.stdout)

命令行输入什么就输出什么

  1. 网络流
const http = require('http')
const server = http.createServer((req, res) => {
    if(req.method === 'POST'){
        req.pipe(res)
    }
})
server.listen(8002)

请求拿到的直接输出到response

  1. 拷贝文件
const fs = require('fs')
const path = require('path')

const fileName1 = path.resolve(__dirname, 'data.txt')
const fileName2 = path.resolve(__dirname, 'dataCopy.txt')

const readStream = fs.createReadStream(fileName1)
const writeStream = fs.createWriteStream(fileName2)
readStream.pipe(writeStream)

readStream.on('end', () => console.log('拷贝完成'))

把data.txt通过文件流拷贝到dataCopy.txt

  1. 网络读取文件
const http = require('http')
const fs = require('fs')
const path = require('path')

const server = http.createServer((req, res) => {
    if(req.method === 'GET'){
        const fileName = path.resolve(__dirname, 'data.txt')
        const stream = fs.createReadStream(fileName)
        stream.pipe(res)  // 将res作为stream的dest
    }
})
server.listen(8002)

把本地data.txt文件写到response返回

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 中,可以使用 `fs.createReadStream()` 方法创建一个可读流并从文件读取数据,然后可以将这个可读流传递给主进程。下面是一个简单的示例代码: ```javascript const fs = require('fs'); const { Readable } = require('stream'); // 从文件中创建可读流 const fileStream = fs.createReadStream('file.txt'); // 将可读流转换为可写流 const writableStream = new Readable({ read(size) { const chunk = fileStream.read(size); if (chunk) { this.push(chunk); } else { this.push(null); } } }); // 将可写流传递给主进程 process.send(writableStream); ``` 在这个示例中,我们首先使用 `fs.createReadStream()` 方法创建了一个可读流 `fileStream`,从文件读取数据。然后,我们创建了一个可写流 `writableStream`,并将 `fileStream` 转换为可写流。最后,我们使用 `process.send()` 方法将可写流 `writableStream` 传递给主进程。 值得注意的是,在主进程中,需要使用 `process.on('message', callback)` 方法来接收从子进程传递的消息。在这个例子中,主进程可以这样接收消息: ```javascript process.on('message', (stream) => { stream.pipe(process.stdout); }); ``` 在主进程中,我们使用 `process.on()` 方法注册了一个回调函数,当从子进程接收到消息时,该回调函数会被调用。在这个回调函数中,我们使用 `stream.pipe()` 方法将可读流 `stream` 中的数据发送到主进程的标准输出流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值