✅ 作者简介:一名将要迈入大三的大学生,致力于提高前端开发能力
✨ 个人主页:前端小白在前进的主页
系列专栏 : node.js学习专栏
⭐️ 个人社区 : 个人交流社区
前言
在文章Node.js — 前端高薪之路绕不过去的坎中我们已经知道了什么是node.js,以及它能够做些什么,在这里的话就先从它的基础 ==> 常用的内置模块讲起,由易到难,循序渐进的帮助大家掌握这门技术!
fs 模块
是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求,该模块的所有方法都有同步和异步两种方式。
JavaScript 的是没有操作文件的能力,但是 Node 是可以做到的,Node 提供了操作文件系统模块,是 Node 中使用非常重要和高频的模块,是绝对要掌握的一个模块系统。
通过回调函数将结果返回
,然后可以立即向下执行代码格式 :
fs.open(path, flags[, mode], callback)
path :文件的路径
flags :文件打开的行为。具体值详见下方表格
mode :设置文件模式(权限),文件创建默认权限为 0666(可读,可写)
callback :回调函数,带有两个参数如:callback(err, fd)
打开模式(flags) | 说明 |
---|---|
r | 以读取模式打开文件。如果文件不存在抛出异常。 |
r+ | 以读写模式打开文件。如果文件不存在抛出异常。 |
rs | 以同步的方式读取文件。 |
rs+ | 以同步的方式读取和写入文件。 |
w | 以写入模式打开文件,如果文件不存在则创建。 |
wx | 类似 ‘w’,但是如果文件路径存在,则文件写入失败。 |
w+ | 以读写模式打开文件,如果文件不存在则创建。 |
wx+ | 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。 |
a | 以追加模式打开文件,如果文件不存在则创建。 |
ax | 类似 ‘a’, 但是如果文件路径存在,则文件追加失败。 |
a+ | 以读取追加模式打开文件,如果文件不存在则创建。 |
ax+ | 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。 |
示例代码:
const fs = require('fs')
fs.open('./file/new成绩.txt','r+',function(err,result) {
if(err) {
return console.log('打开文件失败' + err.message);
}
console.log('打开文件成功' + result);
})
在这里,首先要导入
fs
模块,node中导入模块需要使用内置的require()
方法,这里的回调函数中,如果文件存在的话err会返回null
,在js中null会默认转换为false
,如果文件不存在的话,则err会返回一个错误对象,错误对象会转化为true
,从而在这里去写一个判断输出逻辑!
语法格式 :
fs.stat(path, callback)
path
: 文件路径
callback
: 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。
stats类中的方法:
方法 | 描述 |
---|---|
stats.isFile() | 如果是文件返回 true,否则返回 false。 |
stats.isDirectory() | 如果是目录返回 true,否则返回 false。 |
stats.isBlockDevice() | 如果是块设备返回 true,否则返回 false。 |
stats.isCharacterDevice() | 如果是字符设备返回 true,否则返回 false。 |
stats.isSymbolicLink() | 如果是软链接返回 true,否则返回 false。 |
stats.isFIFO() | 如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。 |
stats.isSocket() | 如果是 Socket 返回 true,否则返回 false。 |
示例代码:
const fs = require('fs')
fs.stat('./file/new成绩.txt', function (err, stats) {
if (err) {
return console.error(err);
}
console.log("读取文件信息成功!");
// 检测文件类型
console.log("是否为文件(isFile) ? " + stats.isFile());
console.log("是否为目录(isDirectory) ? " + stats.isDirectory());
});
获取文件信息用的更多的方法是
isFile()
和isDirectory()
,主要是来判断该文件是否属于文件或者是否属于目录!
语法格式 :
fs.readFile(path[, options], callback)
path
:文件路径
options
:配置选项,若是字符串则指定编码格式
encoding
:编码格式flag
:打开方式callback
:回调函数
err
:错误信息data
:读取的数据,如果未指定编码格式则返回一个 Bufferconst fs = require('fs')
fs.readFile('./file/11.txt','utf-8',function(err,data) {
console.log(err);
console.log('--------');
console.log(data);
})
语法格式 :
fs.writeFile(file, data[, options], callback)
file
:文件路径
data
:写入内容
options
:配置选项,包含 encoding, mode, flag;若是字符串则指定编码格式
callback
:回调函数
示例代码 :
const fs = require('fs')
fs.writeFile('./file/2.txt','hello node.js','utf-8',function(err,data) {
//如果文件写入成功,则err的值等于null null可以转化为false
//如果写入文件失败,则err是一个错误对象
console.log(err);
if(err) {
return console.log('文件写入失败' + err.message);
}
console.log('文件写入成功');
})
./ 或 ../
开头的相对路径时,容易出现路径动态拼接错误的问题__dirname
可以获取文件所处的绝对路径const fs = require('fs')
fs.readFile(`${__dirname}/file/11.txt`,'utf-8',function(err,data) {
if(err) {
return console.log('文件读取失败' + err.message);
}
console.log(__dirname); //D:\node复盘\01
console.log('文件读取成功!' + data);
})
在这里打印了
__dirname
,我们可以发现,打印出来的路径和我们终端打开文件的绝对路径是一样的,所以这样的话就可以解决我们有时候使用../
或./
时出现的路径问题了!
验证路径是否存在:
删除文件:
列出文件:
截断文件:
建立目录:
删除目录:
重命名文件和目录:
监视文件更改:
关闭文件 :
本篇文章主要是学习fs模块的常用api,其实最常用的就是
读写操作
,其他的操作了解即可,node中使用最多的一个知识点就是回调函数,通过回调函数得以实现多处功能,近期我将会出一篇js的回调函数
文章,帮助大家更轻松的学会回调!如果大家对其他的fs操作有兴趣的话可以在菜鸟教程中学习了解!