node基础-fs文件模块 学习笔记

212 阅读4分钟
  1. 什么是Node.js

     就是 JavaScript 的服务器端运行环境, 可以让程序员使用JavaScript  来实现服务器端的编程;
    
  2. Node.js 中 JavaScript 的组成部分

     ECMAScript核心  + 全局成员  + 核心API模块
    
     ECMAScript核心 :var  for  if ....
    
     全局成员:setTimeout, console... 
    
     核心API模块:就是 node 平台 单独提供的一些API,这些APINode 平台所独有的;
    
  3. 读取文件 fs.readFile()

    fs.readFile 有三个参数:

    参数1: 表示要读取的文件的路径

    参数2: 表示 要以什么样的编码格式,来读取指定的文件 默认 编码格式为 null

    参数3: 表示 当文件读取完成,调用这个 callback 回调函数来处理读取的结果:

    回调函数有两个参数: 第一个 参数,是 Error 对象,第二个参数,才是读取成功的结果

const fs = require('fs')
fs.readFile('./files/11.txt', 'utf-8', function (err, data) {
  if (err) return console.log('读取文件失败:' + err.message)
  console.log('读取文件成功,内容是' + data)
})

4.文件写入fs.writeFile()

参数1: 路径字符串,表示要把文件内容,写入到哪个文件中

参数2: 要写入的数据,可以给定一个 字符串

参数3: 可选参数,表示 要以什么格式写入文件内容  默认以 utf8 格式写入文件【一般默认不传递第三个参数】

参数4: 文件写入完成之后的 callback 回调函数

      	在回调函数中,只有一个形参,err 错误对象
const fs = require('fs')
fs.writeFile('./files/2.txt', '222', (err) => {
  if (err) return console.log('写入文件失败!' + err.message)
  console.log('文件写入成功!')
})

注意:如果在使用 fs.writeFile 的时候,要写入的文件不存在,则直接写入;如果要写入的文件路径已经存在,则会覆盖之前的文件

5.文件追加 fs.appendFile()

参数1: 表示要向哪个文件中追加内容,指定一个文件的路径

参数2: 表示要追加的具体的内容,可以传递字符串内容

参数3: 可选参数;表示 追加文本内容时候的编码格式,如果省略此参数,默认以 utf8 的格式追加内容

参数4: 表示 追加完成之后的回调

    	有形参 err ,追加失败之后的错误结果
// 1. 导入 fs 文件操作模块
const fs = require('fs')

// 2. 调用 fs.appendFile 追加文件内容
fs.appendFile('./files/3.txt', '\n333', (err) => {
  if (err) return console.log('追加文件失败!' + err.message)
  console.log('追加文件成功!')
})

  1. 复制文件fs.copyFile()

    fs.copyFile(src, dest[, mode], callback)

    参数1: 要拷贝的源文件名。

    参数2: 拷贝操作的目标文件名。

    参数3: 可选参数,用于拷贝操作的修饰符。默认值: 0

    参数4: 回调函数

    回调函数只有一个参数,错误对象

const fs = require('fs')

fs.copyFile(__dirname + '/files/1.txt', __dirname + '/files/1-copy.txt', (err) => {
  if (err) return console.log('拷贝失败:' + err.message)
  console.log('拷贝成功!')
})

注意: 如果目标文件已经存在,则会覆盖

  1. fs中的路径问题 调用 fs 中方法的时候,如果提供的操作路径是相对路径,则会根据当前执行 node 命令时候的磁盘目录去拼接提供的文件的相对路径,从而会容易出现问题。

在 node 中, __dirname 表示当前这个文件,所处的磁盘目录。

在以后使用fs模块时, 涉及到路径的,都用绝对路径

fs.readFile(__dirname + '/files/1.txt', 'utf8', (err, data) => {
  if (err) return console.log(err.message)
  console.log(data)
})

补充: __dirname 和 __filename 的区别

// __dirname 表示 当前这个文件执行的时候,所处的 根目录,只是代表一层目录而已;
console.log(__dirname) // C:\Users\xxx\Desktop\day1
// __filename 表示 当前这个 文件的 完整路径,路径中包含了具体的文件名
console.log(__filename) // C:\Users\xxx\Desktop\day1\test.js

  1. path路径模块

path模块 用于处理文件和目录的路径

7.1 path.join() 拼接路径

path.join([...paths])

参数: 接收一个路径片段的序列,必须是字符串

返回值: 字符串

// 1. 导入 path 模块
const path = require('path')
const fs = require('fs')

path.join('目录1', {}, '目录2');
// 不是字符串报错 抛出 'TypeError: Path must be a string. Received {}'

path.join('/目录1', '目录2', '目录3/目录4', '目录5', '..');
// 返回: '/目录1/目录2/目录3/目录4'
注意: 拼接的时候符合常规操作, ..就代表向上翻一层目录,所以上面的目5 就和 后面的 抵消了。

//path.join() 路径拼接时,路径名 ./路径 和 /路径 效果是一样的
const result = path.join('c:/', 'a', './b', '/c', './d/e', 'f', '../g')                  
console.log(result) // c:\a\b\c\d\e\g


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

path其它方法属性如有用到,请参考官方文档,这里不做记录。

-------------结束-----------------