Node.js读写文件

前言:本文大部分都是廖雪峰老师的教程内容,自己对其中的一些知识进行了总结和梳理。不对之处还望指正
这篇blog主要作为我自己的知识储备吧,所以没有用很多的话来解释,只详写到自己能懂为止。

在看这篇文章之前,我觉得你需要对JavaScript中的Buffer对象同步异步有所了解。

关于Buffer对象,我推荐阮一峰老师的这一篇:Buffer对象

而同步异步我推荐你去看看掘金上的一篇文章:这一次,彻底弄懂JavaScript执行机制,不局限与同步异步,非常值得一看。

模块导入

我们要读写文件,首先要导入Node.js内置的fs模块即文件系统模块(类似于JAVA里面的包或者类,里面封装了方法)

'use strict'

var fs = require('fs'); 


读文件

  • 异步方法:
'use strict'

var fs = require('fs');

fs.readFile('test.txt','utf-8',function(err,data) {  //读取文本文件
    if(err) {
        console.log(err);
    } else {
        console.log(data);
    }
});

这个方法包含三个参数:文件索引地址、编码格式、回调函数。其中回调函数接收两个参数,错误对象err和读取的数据data


当读取二进制文件时,不传入文件编码时,回调函数的data参数将返回一个Buffer对象。
在Node.js中,Buffer对象就是一个包含零个或任意个字节的数组(注意和Array不同):

fs.readFile('sample.png', function (err, data) {  //读取二进制文件
    if (err) {
        console.log(err);
    } else {
        console.log(data);
        console.log(data.length + ' bytes');
    }
});



Buffer对象和String之间可以相互转化:

//Buffer -> String
var text = data.toString('utf-8');

//String -> Buffer
var buf = Buffer.from(text,'utf-8');
  • 同步方法:
'use strict';

var fs = require('fs');

var data = fs.readFileSync('sample.txt', 'utf-8');
console.log(data);

相比于异步函数,多了Sync(同时、同步)后缀,不接受回调函数。函数直接返回结果,需要用try...catch来捕获错误:

try{
    var data = fs.readFileSync('test.txt','utf-8');
    console.log(data);
} catch(err) {
    console.log(err);
}


写文件

大体原理与读文件类似,这里就不赘述了,需要注意的是跟python一样,JS的写入会覆盖掉先前存在的文本。贴一下大体代码:

'use strict';

var fs = require('fs');

var data = 'Hello';

//异步方法,接受参数:文件索引地址、数据、回调函数。传入String则默认按UTF-8编码。
fs.writeFile('test.txt',data,function(err){
        if(err) {
            console.log(err);
        } else{
            console.log('ok.');
        }
});

//同步方法
fs.writeFileSync('test.txt',data);

博主在测试中发现,当同时进行异步读写时,无论两者的函数谁在前,都会先执行写的操作。


文件状态

如果我们要获取文件大小,创建时间等信息,可以使用fs.stat(),它返回一个Stat对象,能告诉我们文件或目录的详细信息:

'use strict';

var fs = require('fs');

//异步实现
fs.stat('sample.txt', function (err, stat) {
    if (err) {
        console.log(err);
    } else {
        // 是否是文件:
        console.log('isFile: ' + stat.isFile());
        // 是否是目录:
        console.log('isDirectory: ' + stat.isDirectory());
        if (stat.isFile()) {
            // 文件大小:
            console.log('size: ' + stat.size);
            // 创建时间, Date对象:
            console.log('birth time: ' + stat.birthtime);
            // 修改时间, Date对象:
            console.log('modified time: ' + stat.mtime);
        }
    }
});

//同步实现
var stat = fs.statSync('test.txt');
在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、付费专栏及课程。

余额充值