node.js 读写文件内容 操作文件路径 fs模块 path模块

731 阅读5分钟

本文已参与[新人创作礼]活动, 一起开启掘金创作之路。 image.png

前言

阅读完本文内容,你将获得如下知识:

  1. 使用fs模块,读取和写入文件内容
  2. 使用path模块,安全且合理地 拼接文件路径

话不多说 直入正题let's go

1、fs文件系统模块

简介:fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。 例如:

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

接下来 我们三步直接学会这个模块

  1. 导入fs模块
  2. 了解fs.readFile(),如何读取文件内容
  3. 了解fs.writeFile(),如何写入文件内容

1.1导入fs模块

首先 我们做好基本操作,建立起一个node.js的项目

(建文件夹,建.js格式的文件,用VScode打开它)

然后 我们用require()导入我们的fs内置模块

const fs = require("fs")

至此,fs模块便导入到了我们的项目中去

1.2了解fs.readFile(),如何读取文件内容

在代码中写上fs.readFile() 鼠标移动到目标方法上,VScode便会自动提示参数:

image.png

可能有点难以理解,我直接简单易懂的跟大家描述一下:

fs.readFile(必填参数1:字符串-表示文件路径,
            可选参数2:字符串-表示文件编码格式-默认utf8,
            必填参数3:回调方法-完成文件读取操作后通过回调函数处理读取结果)

理论掌握,实践操作一下:

首先我们在工作区再创建一个 ‘快来读我.txt文件’

并且随意写点内容进去

太棒了,您写的代码太棒太优雅了,成功读取到了内容

然后书写代码获取 ‘快来读我.txt’ 目标文件的内容

const fs = require('fs')

fs.readFile("./快来读我.txt",function(err,data){
  console.log(err)
  console.log(data.toString())
})

最后在命令行终端node一下我们的js文件

node ./fs_study.js

image.png

你看 是不是很简单就可以读取文件内容了。

1.3了解fs.writeFile(),如何写入文件内容

同理,我们一样在代码中写上fs.writeFile() 移动鼠标进行查看

image.png

白话简单讲解一下讲解:

fs.writeFile(必填参数1:字符串-指定文件路径,
             必填参数2:字符串-表示要写入的内容,
             可选参数3:字符串-以什么格式写入文件内容-默认utf8,
             必填参数4:回调方法-文件写入完成后的回调函数)

理论掌握,实践操作一下:

首先一样,在工作区任意建个文件 例如 ‘快写点东西进来.txt’

image.png 然后在项目中开始书写代码

const fs = require('fs')

var dataStr = `2022年8月7日 天气晴 又在桥洞里被管家发现了\n
管家说:"少爷别赌气了,老爷已经原谅你了"\n
但是我啥也不听,扭头就跑,因为我爱上了自由不羁的生活\n`

fs.writeFile('./快写点东西进来.txt', dataStr, function(err){
  if (err) {
    console.log(err)
  }
  console.log("文件写入成功,以下是写入的内容:")
  //这里直接复制了我之前读取文件的代码
  fs.readFile("./快写点东西进来.txt",function(err,data){
  console.log(err)
  console.log(data.toString())
})
})

运行结果:

image.png

怎么样,写入操作是不是也很简单呢。

2、path 路径模块

使用相对路径,可以是可以,但是偶尔会出现一些莫名其妙的bug 而使用绝对路径,又不够优雅,并且只能在当前电脑使用,后期项目部署到服务器时又不方便。所以,我们再学一个path模块来优雅地处理文件路径

image.png

path 模块是 Node.js 官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理 需求。

  • path.join() 方法,用来将多个路径片段拼接成一个完整的路径字符串 。
  • path.basename() 方法,用来从路径字符串中,将文件名解析出来。
  • path.extname() 方法 使用extname方法获取路径中的文件的扩展名
  • __dirname指的是当前文件所在文件夹的绝对路径。
// 使用演示
// 使用演示
const path = require('path') // 基操导入模块

// __dirname
console.log("****************打印当前文件所在文件夹的绝对路径*********")
console.log(__dirname)

// join方法
console.log("****************使用join拼接路径演示********************")
const pathStr01 = path.join('/一级目录', '/二级目录/三级目录', '../', '/四级目录')
console.log(pathStr01)

const pathStr02 = path.join(__dirname, './demo/test.txt') 
console.log(pathStr02)

console.log("*****************使用basename方法获取路径中的文件名********")
const fileName = path.basename(pathStr02)
console.log(fileName)
console.log("*****************使用extname方法获取路径中的文件的扩展名********")
const  fileExt= path.extname(pathStr02)
console.log(fileExt)

image.png

我们再回过头来修改之前fs模块演示的代码,让他变得更加优雅

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

var dataStr = `2022年8月7日 天气晴 又在桥洞里被管家发现了\n
管家说:"少爷别赌气了,老爷已经原谅你了"\n
但是我啥也不听,扭头就跑,因为我爱上了自由不羁的生活\n`

const filePath = path.join(__dirname,"././快写点东西进来.txt")

fs.writeFile(filePath, dataStr, function(err){
  if (err) {
    console.log(err)
  }
  console.log("文件写入成功,以下是写入的内容:")
  
  //这里直接复制了我之前读取文件的代码
  fs.readFile(filePath,function(err,data){
  if (err) {
    console.log(err)
  }
  console.log(data.toString())
})
})

运行结果:

image.png

这个代码,不管你拿到台电脑,只要有node 随便跑,自由飞翔。

image.png