nodejs文件操作扩展fs-extra

 fs-extra模块是系统fs模块的扩展,提供了更多便利的API,并继承了fs模块的API,本文详细介绍所有操作方法,方便读者更好的操作服务端文件

fs-extra安装与引入

github地址:https://github.com/jprichardson/node-fs-extra

npm install –save fs-extra

const fs = require(‘fs-extra’);

fs-extra同步操作与异步操作介绍

const fs = require(‘fs-extra’)

// 异步两种操作方式
// Async with promises:
fs.copy(‘/tmp/myfile’, ‘/tmp/mynewfile’)
.then(() => console.log(‘success!’))
.catch(err => console.error(err))

// Async with callbacks:
fs.copy(‘/tmp/myfile’, ‘/tmp/mynewfile’, err => {
if (err) return console.error(err)
console.log(‘success!’)
})

// 同步两种操作方式
// Sync:
try {
fs.copySync(‘/tmp/myfile’, ‘/tmp/mynewfile’)
console.log(‘success!’)
} catch (err) {
console.error(err)
}

// Async/Await:
async function copyFiles () {
try {
await fs.copy(‘/tmp/myfile’, ‘/tmp/mynewfile’)
console.log(‘success!’)
} catch (err) {
console.error(err)
}
}

copyFiles()

fs-extra各方法介绍

  1. 异步文件操作方法
  • copy 复制文件或文件夹
  • emptyDir 清空文件夹(文件夹目录不删,内容清空)
  • ensureFile 确保文件存在(文件目录结构没有会新建)
  • ensureDir 确保文件夹存在(文件夹目录结构没有会新建)
  • ensureLink 确保链接存在(链接目录结构没有会新建)
  • ensureSymlink 确保符号链接存在(目录结构没有会新建)
  • mkdirp 同ensureDir
  • mkdirs 同ensureDir
  • move 移动文件或文件夹
  • outputFile 同fs.writeFile(),写文件(目录结构没有会新建)
  • outputJson 写json文件(目录结构没有会新建)
  • pathExists 判断文件是否存在
  • readJson 读取JSON文件,将其解析为对象
  • remove 删除文件或文件夹,类似rm -rf
  • writeJson 将对象写入JSON文件。
  1. 同步文件操作方法(异步方法名后面加上Sync即可)
  • copySync
  • emptyDirSync
  • ensureFileSync
  • ensureDirSync
  • ensureLinkSync
  • ensureSymlinkSync
  • mkdirpSync
  • mkdirsSync
  • moveSync
  • outputFileSync
  • outputJsonSync
  • pathExistsSync
  • readJsonSync
  • removeSync
  • writeJsonSync

fs-extra各方法举例(同步为例)

  1. 复制

copySync(src, dest, [options])

// 复制文件或文件夹

fs.copySync(‘/tmp/myfile’, ‘/tmp/mynewfile’)

// 复制并覆盖目标目录
fs.copySync(‘/tmp/mydir’, ‘/tmp/mynewdir’,overwrite)
  1. 清空文件夹

emptyDirSync(dir)

// 清空文件夹(文件夹目录不删,内容清空)

fs.emptyDirSync(‘/tmp/some/dir’)
  1. 确保文件存在

ensureFileSync(file)

//确保文件存在。如果请求创建的文件在不存在的目录中,则会创建这些目录。如果文件已经存在,则不会被修改。

const file = ‘/tmp/this/path/does/not/exist/file.txt’
fs.ensureFileSync(file)
  1. 确保文件夹存在

ensureDirSync(dir)

// 确保目录存在。 如果目录结构不存在,则创建它。 像mkdir -p

const dir = ‘/tmp/this/path/does/not/exist’
fs.ensureDirSync(dir)
  1. 确保链接存在

ensureLinkSync(srcpath, dstpath)

// 确保链接存在。 如果目录结构不存在,则创建它。

const srcpath = ‘/tmp/file.txt’
const dstpath = ‘/tmp/this/path/does/not/exist/file.txt’
fs.ensureLinkSync(srcpath, dstpath)
  1. 确保符号链接存在

ensureSymlinkSync(srcpath, dstpath, [type])

// 确保符号链接存在。 如果目录结构不存在,则创建它。

const srcpath = ‘/tmp/file.txt’
const dstpath = ‘/tmp/this/path/does/not/exist/file.txt’
fs.ensureSymlinkSync(srcpath, dstpath)
  1. 移动文件或文件夹

moveSync(src, dest, [options])

fs.moveSync(‘/tmp/somefile’, ‘/tmp/does/not/exist/yet/somefile’)

//带覆盖功能
fs.moveSync(‘/tmp/somedir’, ‘/tmp/may/already/existed/somedir’, { overwrite: true })
  1. 写文件

outputFileSync(file, data, [options])

//与writeFileSync几乎相同(即覆盖),只要父目录不存在,就会创建它。文件必须是文件路径(不允许使用缓冲区或文件描述符)。选项与传递给fs.writeFileSync()的选项相同

const file = ‘/tmp/this/path/does/not/exist/file.txt’
fs.outputFileSync(file, ‘hello!’)

const data = fs.readFileSync(file, ‘utf8’)
console.log(data) // => hello!
  1. 写json文件

outputJsonSync(file, object, [options])

//与writeJsonSync几乎相同,只要目录不存在,就会创建它。

const file = ‘/tmp/this/path/does/not/exist/file.json’
fs.outputJsonSync(file, {name: ‘JP’})

const data = fs.readJsonSync(file)
console.log(data.name) // => JP
  1. 读取JSON文件,将其解析为对象

readJsonSync(file, [options])

//读取JSON文件,然后将其解析为对象。选项与传递给jsonFile.readFileSync的选项相同。

const packageObj = fs.readJsonSync(‘./package.json’)
console.log(packageObj.version) // => 2.0.0
  1. 删除文件或文件夹

removeSync(path)

//删除文件或目录。 该目录可以包含内容。 同rm -rf。
// remove file
fs.removeSync(‘/tmp/myfile’)

fs.removeSync(‘/home/jprichardson’) // I just deleted my entire HOME directory.
  1. 将对象写入JSON文件

writeJsonSync(file, object, [options])

// 将对象写入JSON文件

fs.writeJsonSync(‘./package.json’, {name: ‘fs-extra’})

fs-extra简单应用(NodeJS创建一个文件夹)

const fse = require(‘fs-extra’);
const rootFileName = ‘root’;
const target_dir = ‘targetDir/’;
const fileName = ‘abc’;
const fielType = ‘txt’;
const target_dir = rootFileName + ‘/’;
const target_path = target_dir + fileName + ‘.’ + fileType;


// 如果不存在的话创建文件夹
if (!fs.existsSync(target_dir)) {
fse.ensureDirSync(target_dir);
console.log(‘Folder ‘ + target_dir + ‘ has been created’);
} else {
console.log(‘Folder ‘ + target_dir + ‘ is exist’);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维经验分享

package-cleanup

为什么这么说呢? 卸载deb包时候,可以连不要的依赖关系包一起删除,但是多如牛毛的rpm却不可以。 这个真的是rpm的痛! yum仅仅能在线安装r...

5910
来自专栏Rust语言学习交流

【Rust日报】 2019-08-16 - Rust如何走进Facebook

Chaos: 今天刚看到Facebook内部meetup流出的Slides,原文标题很有意思:Bringing Rust Home to Meet the Pa...

10610
来自专栏编程坑太多

「走进k8s」Kubernetes1.15.1必备知识静态pod(17)

PS:静态pod主要可以把主要的组件进行容器化,etcd,kube-apiserver,kube-controller-manager,kebe-schedul...

30520
来自专栏JMCui

Java8 CompletableFuture 编程

 所谓异步调用其实就是实现一个无需等待被调用函数的返回值而让操作继续运行的方法。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续...

14110
来自专栏恰童鞋骚年

ASP.NET Core on K8S深入学习(3-2)DaemonSet与Job

  Deployment的部署可以指定副本Pod分布在多个Node节点上,且每个Node都可以运行多个Pod副本。而DaemonSet呢,它倔强地保证在每个No...

10610
来自专栏WebDeveloper

yarn镜像源更改和安装注意

34320
来自专栏运维经验分享

CentOS中基于不同版本安装重复包的解决方案

在更新 PHP 版本的时候,出现了NOKEY的错误提示后,暂时没有解决掉这个问题,于是就手动安装了php-mbstring...rpm  包的高版本,这样在接...

14030
来自专栏编程坑太多

「走进k8s」Kubernetes1.15.1必备知识 Pod 的钩子(18)

PS:为了掩饰所以提供了挂载方便查看删除后的优雅处理输出了一段话,但是实际的生产中最好的方式就是关闭容器的服务。PostStart 和 PreStop的使用方法...

17420
来自专栏程序员果果

Prometheus 集成 Node Exporter

Prometheus 官方和一些第三方,已经把一些常用数据库、系统、中间件等的指标数据的采集做成了一个个 exporter,在生产环境中,直接导入使用就可以。这...

11820
来自专栏Rust语言学习交流

Substrate源码分析:启动流程

我们在命令行启动 substrate 节点,到底发生了什么呢?本文基于 substrate 源码,对其启动流程进行了简单的分析。

12740

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励