Node 三大模块【详细】

什么是 fs 文件系统模块

fs是node.js提供的读取和写入的方法来操纵文件的模块

接下来我们聊聊三点内容,如何读取文件写入文件以及一个动态路径的解决问题

在使用fs的方法之前,首先要导入fs,代码很简单,也很固定:

const fs  = require('fs');

然后就可以执行一下读取和写入方法了:

  1. fs.readFile() 方法,用来读取指定文件中的内容
  2. fs.writeFile() 方法,用来向指定的文件中写入内容

读取指定文件中的内容

fs.readFile() 的语法格式:

fs.readFile(path[,option],callback);
  1. 参数1 path:必选参数,字符串,表示文件的路径。
  2. 参数2 option:可选参数,表示以什么编码格式来读取文件。
  3. 参数3 callback:必选参数,文件读取完成后,通过回调函数拿到读取的结果。

举个栗子:

以 utf8 的编码格式,读取指定文件的内容,并打印 err 和 dataStr 的值:

const fs = require('fs');
fs.readFile('./file/1.txt','utf8',function(err,dataStr){
    
    
	console.log(err);  // 打印失败返回的值
	console.log(-------------);
	console.log(dataStr); // 打印成功读取返回的数据
})

聊一下读取成功和读取失败时,errdataStr返回值分别是什么:

读取成功时时:

  1. err返回值:null
  2. dataStr返回值: 是所访问文件的内容;

读取失败时:

  1. err返回值: 是错误信息; 可以通过err.message来打印出来具体的错误信息。
  2. dataStr返回值: undefined;

判断文件是否读取成功

上面我们说到,读取成功时,err的值为null,那么可以判断 err 对象是否为 null,从而知晓文件读取的结果:

const fs = require('fs');
fs.readFile('./file/1.txt','utf8',function(err,dataStr){
    
    
	if(err){
    
    
		return console.log('文件读取失败'+err.message);
	}
	console.log('文件读取成功'+dataStr);
})

tips: 中间的编码格式默认是utf8,如果编码格式为utf8那么就可以忽略不写。

向指定的文件中写入内容

fs.writeFile() 的语法格式

fs.writeFile(file,data[,option],callback);
  1. 参数1 file:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
  2. 参数2 data:必选参数,表示要写入的内容。
  3. 参数3 option:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
  4. 参数4 callback:必选参数,文件写入完成后的回调函数。

向指定的文件中写入内容

举个栗子:

const fs =  require('fs');
fs.writeFile(./file/2.txt,'hello 我就是被写入的内容',function(err){
    
    
	console.log(err);
})

判断文件是否写入成功

方法同上:判断 err 对象是否为 null,从而知晓文件写入的结果:

const fs =  require('fs');
fs.writeFile(./file/2.txt,'hello 我就是被写入的内容',function(err){
    
    
	if(err){
    
    
		return console.log('文件被写入失败'+err.message);
	}
	console.log('文件被写入成功');
})

路径动态拼接的问题

在使用 fs 模块操作文件时,如果提供的操作路径是以 ./../ 开头的相对路径时,很容易出现路径动态拼接错误的问题。

原因: 代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。

解决方案: 在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。

说两种方法:

  1. 第一种直接提供绝对路径(移植性非常差、不利于维护)
  2. 第二种通过__dirname来补全绝对路径
// 第一种
// 移植性非常差、不利于维护

 fs.readFile('C:\\Users\\escook\\Desktop\\code\\file\\1.txt', 'utf8', function(err, dataStr) {
    
    
  if (err) {
    
    
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
}) 



//第二种:
// __dirname 表示当前文件所处的目录

fs.readFile(__dirname + '/files/1.txt', 'utf8', function(err, dataStr) {
    
    
  if (err) {
    
    
    return console.log('读取文件失败!' + err.message)
  }
  console.log('读取文件成功!' + dataStr)
})

tips: 读取方法返回的函数中有两个形参,写入方法的返回函数中只有一个形参;

其实使用__dirname还不是最好的方法,因为node.js的模块中还有更加方便的。path方法,用于拼接路径,获取文件名称,已经文件后缀

那么接下来就说说Path模块

path 路径模块

什么是 path 路径模块

它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
举个栗子:

  1. path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串
  2. path.basename() 方法,用来从路径字符串中,将文件名解析出来

那么想使用这个方法,我们和fs一样要先导入它

const path =  require('path');

那么接下来聊聊这两个方法如何使用:

path.join() 的语法格式

使用 path.join() 方法,可以把多个路径片段拼接为完整的路径字符串;

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

// 注意:  ../ 会抵消前面的路径
// const pathStr = path.join('/a', '/b/c', '../../', './d', 'e')
// console.log(pathStr)  // \a\b\d\e

// fs.readFile(__dirname + '/files/1.txt')

fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', function(err, dataStr) {
    
    
  if (err) {
    
    
    return console.log(err.message)
  }
  console.log(dataStr)
})

tips:…/ 会抵消前面的路径
这种方式搭配fs来获取文件内容,才是绝配;

获取路径中的文件名
使用 path.basename() 方法,可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名:

这个获取而来的文件名有两种,第一种是含有后缀的,第二种是不含有后缀的;先说第一种:获取含有后缀的文件名:

const path = require('path')

// 定义文件的存放路径
const fpath = '/a/b/c/index.html'
const fullName = path.basename(fpath)
console.log(fullName)   // 此时的输出结果是index.html

第二种:获取没有后缀的文件名:

const path = require('path')
const fpath = '/a/b/c/index.html'
const nameWithoutExt = path.basename(fpath, '.html')   
console.log(nameWithoutExt)            // 此时的输出结果是去掉了.html后缀的 index

tips: path.basename()的作用是获取文件名称的,它的第二个参数是用来去除不想要的后缀。

path为我们还提供了一个方法是只获取文件名的后缀:也就是path.extname()

使用方法很简单,只用把我们需要获取的目标文件的路径放进去,它的输出结果就是这个文件的后缀;

举个栗子:

const fpath = '/a/b/c/index.html';   // 定义一个路径字符串
const fext = path.extname(fpath);
console.log(fext);  // 输出结果就是:.html


不断复盘,不断优秀,踏实做人,认真做事;关注三连,持续更新~~~

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/egg_er/article/details/122837996
今日推荐