Node.js 文件处理模块

本文详细介绍了Node.js中的fs模块,涵盖了同步和异步文件读写、路径操作、目录管理以及元数据获取等核心功能,展示了fs模块在处理文件I/O时的实用性和多样性。
摘要由CSDN通过智能技术生成

fs模块

使用如下代码引入fs模块:

const fs = require('fs')

比较常见的就是使用utf8编码读取文件,返回字符串,例如:

const content = fs.readFileSync('file.txt', 'utf8')  
console.log(content)

当然还有fs.readFile()和fs.promise.readFile()这两种异步读取方式,还有更低级的read()方法,这几种方式的代码更复杂一些。对于大部分数据量不大的文本文件,只需要使用readFileSync()这种同步方式即可。

要写入文件内容,使用writeFileSync()方法:

fs.writeFileSync('file.txt', 'some content', 'utf8')

与读取文件类似,写文件操作也有对应的异步方法和低级API,大部分情况下使用同步方式即可。

要追加文件内容,使用appendFileSync()方法:

fs.appendFileSync('file.txt','new content','utf8')

要复制文件,使用copyFileSync()方法:

fs.copyFileSync('old.txt' ,  'new.txt')
fs.copyFileSync('old.txt' ,  'new.txt')

要删除文件,使用rmSync()方法,如下命令删除当前工作目录下的old.txt文件:

fs.rmSync('old.txt')

要重命名文件,使用renameSync()方法,例如:

fs.renameSync('old.txt','new.txt')  // 重命名

值得一提的是,移动文件的本质也是重命名文件——对文件的路径进行重命名,fs模块并没有类似moveSync()的方法,仍然是使用renameSync()以重命名路径的方式完成文件的移动,如下示例将old.txt移动到文件夹dir下:

fs.renameSync('old.txt','dir/old.txt')

如下示例移动且重命名文件:

fs.renameSync('old.txt','dir/new.txt') 

fs.readDirSync()方法用于列举文件或目录下的文件列表,类似于ls命令,如下示例读取当前目录下的文件列表:

console.log(fs.readdirSync('.'))

这会输出一个由字符串组成的数组,每个元素就是文件或目录名。

使用mkdirSync()新建目录,使用rmdirSync()删除目录,例如:

fs.mkdirSync('newdir')
fs.rmdirSync('newdir')

注意,如果目录已经存在,则会报错。

existsSync()方法检查文件或目录是否存在,传入相对或绝对路径:

console.log(fs.existsSync('file.txt'))  // 检查文件是否存在
console.log(fs.existsSync('dir'))  // 检查目录是否存在

fs.statSync()返回文件或目录的属性,包括修改时间、创建时间、文件大小等元数据。

console.log(fs.statSync('file.txt')) 

path模块

使用如下代码引入fs模块:

const fs = require('path')

下面列出了一些常用的路径:

  • process.cwd() 当前工作目录的绝对路径。
  • __filename 当前代码文件的绝对路径。
  • __dirname 当前代码文件所在目录的绝对路径。
  • os.homedir() 家目录,需要先引入os模块。
  • path.sep /或\,取决于操作系统。

如下是使用path模块进行路径解析的示例代码:

const p = "D:\\Test\\example.js"
console.log(path.basename(p))  // example.js,含后缀的文件名
console.log(path.extname(p))  // .js , 后缀名
console.log(path.basename(p, path.extname(p))) // example,不含后缀的文件名
console.log(path.dirname(p)) //  D:\Test ,所在目录

path.join()用于组合多个路径,它会自己处理路径中存在的’/‘、’//‘、’…'。

console.log(path.join('a','//b','./c')) // a\b\c

// 自动解析相对路径符号
console.log(path.join('a',  '.',  'b',  '..',  'c')) // a\c 

path.normalize()规范化路径为当前操作系统的格式。

console.log(path.normalize('a/b/c')) // a\b\c

'/foo/bar/baz/asdf'
console.log(path.normalize('/foo/bar//baz/asdf/quux/..'))  // '/foo/bar/baz/asdf'

path.resolve()从最后一个路径开始,反向处理。

path.resolve('/foo/bar', './baz')   // returns '/foo/bar/baz'
path.resolve('/foo/bar', 'baz')   // returns '/foo/bar/baz'
path.resolve('/foo/bar', '/baz')   // returns '/baz'
path.resolve('/foo/bar', '../baz')   // returns '/foo/baz'
path.resolve('home','/foo/bar', '../baz')   // returns '/foo/baz'
path.resolve('home','./foo/bar', '../baz')   // returns '/home/foo/baz'
path.resolve('home','foo/bar', '../baz')   // returns '/home/foo/baz'
path.resolve('home', 'foo', 'build','aaaa','aadada','../../..', 'asset') //return '/home/foo/asset'
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值