Node.js读写文件

读写文件

使用fs模块来实现所有有关文件和目录的创建、写入和删除操作。在fs模块中,所有操作都可以使用同步和异步这两种方法。例如在执行读文件操作时,可以使用readFile和readFileSync(同步)方法

   var fs = require('fs');
   var data = fs.readFileSync('./index.html', 'utf8');
   // 停止执行代码直到操作结束
   console.log(data)

而异步方法将操作结果作为回调函数的参数,这种error-first回调方式可以参考另一篇博文 node.js知识点总结
在很少的场景比如读取配置文件并启动服务器才会使用同步方法
读取文件后得到的是文件原始二进制数据缓存区中的内容,使用toString方法将该内容以字符串形式输出

   fs.readFile('./test.txt', function(err, data){
       if(err) console.log('文件读取发生错误');
       else {
           // console.log(data);
           console.log(data.toString());
       }
   })

同样写文件也是分为writeFile和writeFileSync

   fs.writeFile(filename, data, [options], callback)

例如

   fs.writeFile('./message.txt', '第一行\r\n第二行', function(err){
       if(err) console.log...
       else console.log('写文件操作成功');
   })

从指定位置开始读写

首先需要使用fs模块中的open方法或openSync方法打开文件

   var fs = require('fs');
   fs.open('./message.txt', 'r', function(err, fd){
      // 创建一个文件缓存区,将数据读进来
      var buf = new Buffer(255);
      // 一个汉字的utf编码为3个字节数据
      fs.read(fd, buf, 0, 9, 3, function(err), byteRead, buffer){
          console.log(buffer.slice(0, bytesRead).toString());
      })
   })

创建和读取目录

使用mkdir来创建目录,callback和之前的使用方式一致

    fs.mkdir(path, [mode], callback)

mode参数用于指定该目录权限,默认值为0777(任何人可读写)。
读取目录可使用readdir

   fs.readdir(path, callback);

流的基本概念

当使用readFile方法读取文件内容时,Node.js首先将文件内容完整读入缓存区,再从缓存区读取文件内容。在使用writeFile的时候,首先将该内容完整读入缓存区,然后一次性将缓存区中内容写入文件。而read方法则不同: 1、将需要书写的数据写到一个内容缓存区。2、等缓存区写满后再将该缓存区内容写入到文件中。在文件读写过程中允许执行其他处理。
在一个应用程序中,流是一组有序的、有起点和终点的字节数据的传输手段。在各种对象之间传输数据的时候,总是先将该对象所包含的数据转换成各种形式的流数据(即字节数据),再通过流的传输,到达目的地将数据流转换成该对象中可以使用的数据。
在Node.js中,使用各种实现了stream.Writeable接口的对象来将流数据写入对象,所有这些对象都是继承了EventEmitter类的实例对象,在写入数据过程中,会触发各种事件

使用readStream对象读取

在fs模块中,可以使用createReadStream方法创建一个将文件内容读取为数据流的ReadStream对象

   fs.createReadStream(path, [options]);

在实际使用中

   var file = fs.createReadStream('./message.txt', {start: 3, end: 12 });
   file.on('open', function(fd){
       console.log('开始读取文件');
   })
   file.on('data', function(data){
       console.log('读取到数据');
   })
   file.on('end', function(){
       console.log('文件全部读取完毕');
   })
   file.on('close', function(){
       console.log('文件被关闭');
   })
   file.on('error', function(){
       console.log('读取文件失败')
   })

写入文件也类似

   var file = fs.createReadStream('./message.txt');
   var out = fs.createWriteStream('./anotherMessage.txt');
   file.on('data', function(data){
       // WriteStream对象的write方法
       out.write(data);
   })
   out.on('open', function(){ ... })
在Vue中使用Node.js读写文件时,需要在Vue项目的后端使用Node.js来执行文件操作。下面是一个简单的例子: 1. 首先,确保你已经安装了Node.js和npm。 2. 在Vue项目的根目录下,打开终端并运行以下命令来创建一个简单的Express服务器: ```bash npm init -y npm install express --save ``` 3. 创建一个名为`server.js`的文件,并在其中添加以下代码: ```javascript const express = require('express'); const fs = require('fs'); const app = express(); const port = 3000; app.get('/readFile', (req, res) => { fs.readFile('path/to/file.txt', 'utf8', (err, data) => { if (err) { console.error(err); res.status(500).send('Error reading file'); } else { res.send(data); } }); }); app.post('/writeFile', (req, res) => { const content = 'Hello, Vue!'; fs.writeFile('path/to/file.txt', content, 'utf8', (err) => { if (err) { console.error(err); res.status(500).send('Error writing file'); } else { res.send('File written successfully'); } }); }); app.listen(port, () => { console.log(`Server running at http://localhost:${port}`); }); ``` 替换`path/to/file.txt`为你要读写文件路径。 4. 在终端中运行以下命令,启动服务器: ```bash node server.js ``` 你会看到服务器已经在`http://localhost:3000`上运行。 5. 在Vue组件中,你可以使用`axios`或其他HTTP库来与服务器通信。下面是一个使用`axios`的例子: ```vue <template> <div> <button @click="readFile">Read File</button> <button @click="writeFile">Write File</button> <p>{{ fileContent }}</p> <p>{{ writeStatus }}</p> </div> </template> <script> import axios from 'axios'; export default { data() { return { fileContent: '', writeStatus: '', }; }, methods: { readFile() { axios.get('/readFile') .then(response => { this.fileContent = response.data; }) .catch(error => { console.error(error); }); }, writeFile() { axios.post('/writeFile') .then(response => { this.writeStatus = response.data; }) .catch(error => { console.error(error); }); }, }, }; </script> ``` 在上述例子中,我们在Vue组件中定义了两个按钮,分别用于读取文件写入文件。当用户点击按钮时,通过发送HTTP请求与服务器进行通信。读取文件时,服务器将返回文件内容,并在Vue组件中展示;写入文件时,服务器将写入指定内容文件,并在Vue组件中展示写入状态。 请注意,这只是一个简单的示例,你可以根据需要进行修改和扩展。同时,确保在服务器端进行适当的错误处理和安全性验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值