您好,欢迎来到九壹网。
搜索
您的当前位置:首页Node.jsfs模块原理及常见用途

Node.jsfs模块原理及常见用途

来源:九壹网
Node.jsfs模块原理及常见⽤途

JavaScript 的是没有操作⽂件的能⼒,但是 Node 是可以做到的,Node 提供了操作⽂件系统模块,是 Node 中使⽤⾮常重要和⾼频的模块,是绝对要掌握的⼀个模块系统。

fs 模块提供了⾮常多的接⼝,这⾥主要说⼀下⼀些常⽤的接⼝。1.常⽤API快速复习fs.stat 检测是⽂件还是⽬录

const fs = require('fs')

fs.stat('hello.js', (error,stats)=>{ if(error) {

console.log(error) } else {

console.log(stats)

console.log(`⽂件:${stats.isFile()}`)

console.log(`⽬录:${stats.isDirectory()}`) }})

fs.mkdir 创建⽬录

const fs = require('fs')fs.mkdir('logs', error => { if(error) {

console.log(error) } else {

console.log('⽬录创建成功!') }})

fs.rmdir 删除⽬录

const fs = require('fs')fs.rmdir('logs', error => { if(error) {

console.log(error) } else {

console.log('成功删除了⽬录 logs') }})

fs.writeFile 创建写⼊⽂件

const fs = require('fs')

fs.writeFile('logs/hello.log','您好~\\n', error => { if(error) {

console.log(error) } else {

console.log('成功写⼊⽂件'); }})

fs.appendFile 追加⽂件

const fs = require('fs')

fs.appendFile('logs/hello.log','hello~\\n', error => { if(error) {

console.log(error) } else {

console.log('成功写⼊⽂件'); }})

fs.readFile 读取⽂件

const fs = require('fs')

fs.readFile('logs/hello.log','utf-8', (error, data) => { if(error) {

console.log(error) } else {

console.log(data); }})

fs.unlink 删除⽂件

const fs = require('fs')

fs.unlink(`logs/${file}`, error => { if(error) {

console.log(error) } else {

console.log(`成功删除了⽂件: ${file}`) }})

fs.readdir 读取⽬录

const fs = require('fs')

fs.readdir('logs', (error, files) => { if(error) {

console.log(error) } else {

console.log(files); }})

fs.rename 重命名,还可以更改⽂件的存放路径

const fs = require('fs')

fs.rename('js/hello.log', 'js/greeting.log', error => { if(error) {

console.log(error) } else {

console.log('重命名成功') }})

2.第三⽅npm包 mkdirp 的使⽤

mkdirp不仅可以创建⽂件夹,还可以创建多层的⽂件夹,类似 mkdir -p 命令midir -p tmp/foo/bar/baz

上述命令也可以在当前⽬录创建多层⼏⽂件夹。如下代码在当前⽬录⽣成多层级⽂件夹

const mkdirp = require('mkdirp')

mkdirp('tmp/foo/bar/baz').then(made => console.log(`创建⽬录于: ${made}`))// 创建⽬录于: /Users/zhangbing/github/CodeTest/Node/fs/tmp3.实战举例实战1

判断服务器上⾯有没有 upload ⽬录。如果没有就创建这个⽬录,如果有的话不做操作

const fs = require('fs')

const path = './upload'

fs.stat(path, (err, data) => { if(err) {

// 执⾏创建⽬录 mkdir(path) return }

if(data.isDirectory()) {

console.log('upload⽬录存在'); }else{

// ⾸先删除⽂件,再去执⾏创建⽬录 fs.unlink(path, err => { if(!err) {

mkdir(path) }

}) }})

function mkdir(dir) { fs.mkdir(dir, err => { if(err) {

console.log(err); return } })}

实战2

wwwroot ⽂件夹下⾯有 images css js 以及 index.html, 找出 wwwroot ⽬录下⾯的所有的⽬录,然后放在⼀个数组中使⽤同步⽅法⽅式

const fs = require('fs')const path = './wwwroot'const dirArr = []

const dirs = fs.readdirSync(path)dirs.forEach(item => {

if(fs.statSync(path + '/' + item).isDirectory()) { dirArr.push(item) }})

console.log('dirArr', dirArr)// dirArr [ 'css', 'images', 'js' ]

使⽤ async/await ⽅式

const fs = require('fs')const path = './wwwroot'const dirArr = []

function isDir(path) {

return new Promise((resolve, reject) => { fs.stat(path, (error, stats) => { if(error) {

console.log(error) reject(error) return }

if(stats.isDirectory()) { resolve(true) } else {

resolve(false) } }) })}

function main(){

fs.readdir(path, async (error, data) => { if(error) {

console.log(error) return } else {

for(let i = 0; i < data.length; i++) { if(await isDir(path + '/' + data[i])) { dirArr.push(data[i]) } }

console.log('dirArr', dirArr) } })}

main() // dirArr [ 'css', 'images', 'js' ]

4.管道流

管道提供了⼀个输出流到输⼊流的机制。通常我们⽤于从⼀个流中获取数据并将数据传递到另外⼀个流中。以下实例我们通过

读取⼀个⽂件内容并将内容写⼊到另外⼀个⽂件中。

const fs = require(\"fs\")//创建⼀个可读流

const readerStream = fs.createReadStream('input.txt')//创建⼀个可写流

const writerStream = fs.createWriteStream('output.txt')//管道读写操作

//读取input.txt⽂件内容,并将内容写⼊到output.txt⽂件中readerStream.pipe(writerStream)console.log(\"程序执⾏完毕\")fs.createReadStream 从⽂件流中读取数据

const fs = require('fs')

const fileReadStream = fs.fileReadStream('demo1.js')let count = 0let str = ''

fileReadStream.on('data', chunk => {

console.log(`${++count}接收到:${chunk.length}`) str += chunk})

fileReadStream.on('end', () => { console.log('---结束---')

console.log(count + ',' + star)})

fileReadStream.on('error', error => { console.log(error)})

fs.createWriteStream 写⼊⽂件

const fs = require(\"fs\")

const data ='我是从数据库获取的数据,我要保存起来'//创建⼀个可以写⼊的流,写⼊到⽂件output.txt中

const writerStream = fs.createWriteStream('output.txt')//使⽤utf8编码写⼊数据

writerStream.write(data,'UTF8')//标记⽂件末尾writerStream.end()

//处理流事件-->finish事件

writerStream.on('finish', () => {

/*finish-所有数据已被写⼊到底层系统时触发。*/console.log(\"写⼊完成。\")})

writerStream.on('error', err => {console.log(err.stack);})

console.log(\"程序执⾏完毕\")实战:复制图⽚

在项⽬根⽬录有⼀张图⽚2020.png,把它复制到 /wwwroot/images 中代码如下

const fs = require(\"fs\")

const readStream = fs.createReadStream('./2020.png')

const writeStream = fs.createWriteStream('./wwwroot/images/2021.png')readStream.pipe(writeStream)

需要特别注意的是,fs.createWriteStream 要写⼊的⽬录⼀定要带上要复制的⽂件名,也就是不能写成fs.createWriteStream('./wwwroot/images/') 否则在 macOS 下会报如下错误:Error: EISDIR: illegal operation on a directory, open

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务