Node 之 fs 基本模块

本文介绍了Node.js中的fs基本模块,包括其作用、异步与同步读取文件的原理和API,如readFile、writeFile、stat、appendFile等。fs模块用于文件系统的读写操作,异步方法利用CPU空闲提高效率,同步方法则会阻塞执行。
摘要由CSDN通过智能技术生成

## fs 基本模块

学习首先我们需要知道 fs 基本模块是做什么的,其中有哪些 API 给我们使用,这些 API 的作用是什么。这三点是我们需要掌握的。提升需要找到这些 API 的原理,运用的场景与不同之处,我们先进行基础的学习。

# fs 基本模块的作用

在了解 fs 基本模块的基本作用的时候,我们需要了解到 JavaScript 是一个单线程的模型,不能同时进行多步操作。这里就存在了 异步、同步的差异了。

fs 基本模块就是与电脑的存储部分进行读写操作的一个模块,我们通过它来访问电脑的数据和存储我们需要的数据。下面简述一些基本的 API。

# 异步读取文件

- 何为异步

异步就是某些访问需要等待一些时间,但是此时的 CPU 又是空闲的,所以在这段时间内将 CPU 的资源交给其他任务。可以更加的高效。

1. 一般情况下 readFile 函数接收的参数为 路径 编码方式 回调函数(错误, 数据)

'use strict'
const fs = require('fs');

fs.readFile('README.md', 'utf-8', function (err, data) {
    if (err) {
        console.log(err);
    } else {
        console.log(data);
    }
})

2. 若没有设置编码方式,会默认转化为 Buffer 数组,(十六进制)

// 为了构造一种访问时间过程的现象我们采用 setTimeout
setTimeout(() => {
    fs.readFile('README.md', function (err, data) {
        if (err) {
            console.log(err);
        } else {
            console.log(data); // 十六进制 Buffer 数组
        }
    })
}, 1000);
console.log('数据正在加载中');

# 同步读取文件

- 何为同步

同步时指访问获取数据这个过程都需要占用 CPU 即使 CPU 空闲。

和异步相比, 方法后面加上了 Sync ,同时不需要回调函数。

let data = fs.readFileSync('README.md', 'utf-8');
console.log(data); // 捕获错误,通过 try catch

# 异步与同步写文件

异步和同步写文件和读文件基本上一致,仅仅是 API 上有着细微的差别。

1. writeFile(uri, data, fucntion(err));

2. writeFile(uri, data);

let data = 'Hello, Node.js!';

// 异步
fs.writeFile('output.txt', data, function (err) {
    if (err) {
        console.log(err);
    } else {
        console.log('ok');
    }
})

// 同步
fs.writeFileSync('output.txt', data);

# 查看文件的信息

stat 和 statSync ,可以查看这个地址的基本信息。

fs.stat('output.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);
        }
    }
})

let stat = fs.statSync('output.txt');
 // 是否是文件
 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);
 }

# 在文件中追加内容 

appendFile 和 appendFileSync,这两种方法可以在文本内追加内容。文本中的信息不会被覆盖,但是也不会去重。

fs.appendFile(path, JSON.stringify(list), (err) => {
                if (!err) {
                    console.log('list save');
                }
                else {
                    console.log(err);
                }
            })

参考资料

https://www.liaoxuefeng.com/wiki/1022910821149312/1023025732384672

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值