当前位置:   article > 正文

npm------Node.js文件读写功能fs模块fs.writeFile()、fs.writeFileSync()、fs.appendFile()等介绍

npm------Node.js文件读写功能fs模块fs.writeFile()、fs.writeFileSync()、fs.appendFile()等介绍

前言:fs模块是nodeJS软件自带的全局模块,无需单独下载直接require('fs')即可

一、使用NodeJs读取文件内容

读取文件内容
  • 使用 fs.readFile() 方法,向其传入文件路径、编码、以及会带上文件数据(以及错误)进行调用的回调函数
  • 也可以使用同步的版本 fs.readFileSync():
const fs = require('fs') // js文件中导入对应fs模块:fs.readFile()|fs.readFileSync()
fs.readFile('E:/前端目录/javascript面试demo/node/a.txt', 'utf-8', (err, data) => {
  if (err) {
    console.log('err: ', err);
    return;
  }
  console.log('data: ', data);
});
-----------------------------------------------------------------------------------------
try {
  const data = fs.readFileSync('E:/前端目录/javascript面试demo/node/a.txt', 'utf8')
  console.log(data)
} catch (err) {
  console.error(err)
}

备注:
fs.readFile() 和 fs.readFileSync() 都会在返回数据之前将文件的全部内容读取到内存中。
这意味着大文件会对内存的消耗和程序执行的速度产生重大的影响。
在这种情况下,更好的选择是使用流来读取文件的内容。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

二、使用NodeJs写入文件内容和追加内容

文件写入功能
  • fs.writeFile() 和 同步方法 fs.writeFileSync() 写入文件
#### 写入文件(文件可以不存在,会自动添加改文件)

// fs.writeFile() './a.txt' 指当前文件目录下的a.txt
console.log(fs.writeFileSync('./a.txt', content, err => {
  console.log(err);
}));

// 同步的版本 fs.writeFileSync()
try {
  const data = fs.writeFileSync('./a.txt', content)
  //文件写入成功。
} catch (err) {
  console.error(err)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
内容追加到文件末尾
  • fs.appendFile() 将内容追加到文件末尾(及其对应的 fs.appendFileSync())
#### 将内容追加到文件内容的末尾
fs.appendFile('./b.txt', content, err => {
  if (err) {
    console.error(err)
    return
  }
  //完成!
}); 

备注:
和写入文件(writeFile|writeFileSync)一样如果文件不存在,会创建出来对应文件并写入对应内容!!!
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 通过指定标志来修改默认的行为:
r+ 打开文件用于读写。
w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。
a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。
a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件。
主要就是fs.writeFile()里面使用指定标示:(后期要是遇到其他的再来添加)
fs.writeFile('/Users/joe/test.txt', content, { flag: 'a+' }, err => {}) // 一直执行的话,不会覆盖掉原来的文件内容,而是在尾部继续追加内容;
fs.writeFile('/Users/joe/test.txt', content, { flag: 'w+' }, err => {}) //  一直执行的话,会覆盖掉原来的文件内容,和不加flag属性功能一样;
fs.writeFile('/Users/joe/test.txt', content, { flag: 'r+' }, err => {}) //  一直执行的话,会覆盖掉原来的文件内容,和不加flag属性功能一样;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三、在 Node.js 中使用文件夹

检测当前目录是否存在
  • fs.access(): 检查文件夹是否存在以及 Node.js 是否具有访问权限
### 存在的话无返回信息;不存在的话err会返回报错信息
console.log(fs.access('./dist', err => {
  console.log('err: ', err);
}))
  • 1
  • 2
  • 3
  • 4
  • fs.existsSync(path) 以同步的方法检测目录是否存在。如果目录存在 返回 true ,如果目录不存在 返回false
console.log(fs.existsSync('./dist'))  // true
  • 1
创建新的文件夹
  • fs.mkdir() 或 fs.mkdirSync() 创建新的文件夹
#### 直接创建对应目录,如果目录存在会报错。不会覆盖掉!
fs.mkdir('a', err=> {
  console.log('err: ', err);
})

try {
  if(!fs.existsSync('a')){
    fs.mkdirSync('a')
  }
} catch (error) {
  console.log('error: ', error);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
读取目录的内容
  • fs.readdir() 或 fs.readdirSync() 读取目录的内容,并返回它们的相对路径
#### 直接跟第一个参数路径,返回对应的目录内容
const fs = require('fs')
const path = require('path')

const folderPath = '/Users/joe'
##### 读取相对的目录内容
fs.readdirSync(folderPath)

##### 读取完整的路径下的目录内容
fs.readdirSync(folderPath).map(fileName => {
  return path.join(folderPath, fileName)
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
重命名文件夹
  • fs.rename() 或 fs.renameSync() 可以重命名文件夹。 第一个参数是当前的路径,第二个参数是新的路径
### 这种写法记得一定要都一个回调函数
fs.rename('a.txt', 'c.txt', err => {
  if (err) {
    console.log(err);
  }
})
fs.renameSync() 是同步的版本:直接就是两个参数,后面不用加回调函数
try {
  fs.renameSync('a.txt', 'c.txt')
} catch (err) {
  console.error(err)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
删除文件夹
  • fs.rmdir() 或 fs.rmdirSync() 可以删除空的文件夹
#### 只能删除空的文件夹
fs.rmdir('dist',err => {console.log(err)})
try {
   fs.rmdirSync('dist')
} catch(err) {
	console.log(err)
}

#### 删除非空的文件夹要安装对应的替代插件(见下文)
执行代码: npm install fs-extra 或 yarn add fs-extra 添加到 dependencies 会添加到生产模式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • fs.remove()和fs.removeSync()删除文件夹(包含非空文件夹):前提是下载新的替代插件fs-extra

执行代码:npm install fs-extra 或 yarn add fs-extra添加到 dependencies 会添加到生产模式

const fs = require('fs-extra');
#### 异步写法:最后要有回调函数
fs.remove('dist',err=> {console.log(err)}) 
#### 同步写法:可以直接删除文件夹,后面不强制加回调函数
try {fs.removeSync('dist)} catch (err) {console.log(err)} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 结合promise或async/await异步处理函数
// 采用promise的形式来删除文件夹,它本身会返回一个promise对象;
fs.remove('dist').then((res) => {
  console.log('res: ', res);
}).catch((err) => {
  console.log('err: ', err);
})

// 使用 async/await:成对出现

async function removeFolder(param) {
  try {
    await fs.removeSync(param)
  } catch (error) {
    console.log(error );
  }
}

removeFolder('dist')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

fs模块方法汇总如下:

  • 无需安装。 作为 Node.js 核心的组成部分,可以通过简单地引用来使用它:
const fs = require('fs')
  • 1
  • 一旦这样做,就可以访问其所有的方法,包括:
fs.access(): 检查文件是否存在,以及 Node.js 是否有权限访问。
fs.appendFile(): 追加数据到文件。如果文件不存在,则创建文件。
fs.chmod(): 更改文件(通过传入的文件名指定)的权限。相关方法:fs.lchmod()、fs.fchmod()。
fs.chown(): 更改文件(通过传入的文件名指定)的所有者和群组。相关方法:fs.fchown()、fs.lchown()。
fs.close(): 关闭文件描述符。
fs.copyFile(): 拷贝文件。
fs.createReadStream(): 创建可读的文件流。
fs.createWriteStream(): 创建可写的文件流。
fs.link(): 新建指向文件的硬链接。
fs.mkdir(): 新建文件夹。
fs.mkdtemp(): 创建临时目录。
fs.open(): 设置文件模式。
fs.readdir(): 读取目录的内容。
fs.readFile(): 读取文件的内容。相关方法:fs.read()。
fs.readlink(): 读取符号链接的值。
fs.realpath(): 将相对的文件路径指针(...)解析为完整的路径。
fs.rename(): 重命名文件或文件夹。
fs.rmdir(): 删除文件夹。
fs.stat(): 返回文件(通过传入的文件名指定)的状态。相关方法:fs.fstat()、fs.lstat()。
fs.symlink(): 新建文件的符号链接。
fs.truncate(): 将传递的文件名标识的文件截断为指定的长度。相关方法:fs.ftruncate()。
fs.unlink(): 删除文件或符号链接。
fs.unwatchFile(): 停止监视文件上的更改。
fs.utimes(): 更改文件(通过传入的文件名指定)的时间戳。相关方法:fs.futimes()。
fs.watchFile(): 开始监视文件上的更改。相关方法:fs.watch()。
fs.writeFile(): 将数据写入文件。相关方法:fs.write()。
关于 fs 模块的特殊之处是,所有的方法默认情况下都是异步的,但是通过在前面加上 Sync 也可以同步地工作。

例如:

fs.rename()
fs.renameSync()
fs.write()
fs.writeSync()
这在应用程序流程中会产生巨大的差异。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/474177
推荐阅读
相关标签
  

闽ICP备14008679号