IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Node.js 从入门到放弃(三) -> 正文阅读

[JavaScript知识库]Node.js 从入门到放弃(三)

使用fs模块

import fs from 'fs'

// fs模块常用的方法
fs.writeFile()    // 写入文件
fs.appendFile()	  // 追加内容的写入文件
fs.readFile()	  // 读文件,读取的数据为buffer类型
fs.unlink()		  // 删除文件
fs.rename()		  // 重命名或剪切文件
fs.stat()	      // 判断文件还是目录
fs.readdir()	  // 获取指定目录下的文件名列表
fs.mkdir()		  // 创建目录
fs.rmdir()		  // 删除目录
fs.createReadStream() // 通过流的方式读取文件
fs.createWriteStream() // 通过流的方式写入文件

1. writeFile 方法

参数1: 写入的文件名称,可指定具体路径,若指定具体路径,路径的文件目录必须存在,否则会报错
参数2: 写入文件的内容
参数3: 回调函数
调用该方法后,会在当前目录创建一个index.txt文件,若文件已存在,则删除该文件并重新创建,文件的内容为:Node.js 从入门到放弃。

fs.writeFile('index.txt', 'Node.js 从入门到放弃', err => {
    if (err) {
        console.log(err)
        return
    }
    console.log('写入文件成功!')
})

2. appendFile 方法

参数1: 写入的文件名称,可指定具体路径,若指定具体路径,路径的文件目录必须存在,否则会报错
参数2: 写入文件的内容
参数3: 回调函数
调用该方法后,会在当前目录创建一个index.txt文件,若文件已存在,不会删除文件,而是在原文件的基础上添加内容,文件的内容为:Node.js 从入门到放弃。调用两次则文件的内容为:Node.js 从入门到放弃Node.js 从入门到放弃。

fs.appendFile('index.txt', 'Node.js 从入门到放弃', err => {
    if (err) {
        console.log(err)
        return
    }
    console.log('追加内容的写入文件成功!')
})

3. readFile方法

参数1: 指定读取的文件,若文件不存在,会报错
参数2: 回调函数
调用该方法后,会读取指定的文件内容,由回调函数第二个参数返回,类型为buffer,调用toString方法以便在控制台显示打印的日志内容。

fs.readFile('index.txt', (err, data) => {
        if (err) {
        console.log(err)
        return
    }
    console.log('读文件成功!', data.toString())
})

4. unlink方法

参数1: 指定删除的文件,若文件不存在,会报错
参数2: 回调函数
调用该方法后,会删除指定的文件。

fs.unlink('index.txt', err => {
    if (err) {
        console.log(err)
        return
    }
    console.log('删除文件成功!')
})

5. rename方法

参数1: 旧文件名称
参数2: 新文件名称
参数3: 回调函数
调用该方法后,若新旧文件在同一目录,则重命名文件名称,若新旧文件不在同一目录,则剪切文件。若旧文件原本就不存在,会报错;指定具体的目录时,若目录不存在则报错。

fs.rename('index.txt', 'news/css.txt', err => {
    if (err) {
        console.log(err)
        return
    }
    console.log('重命名文件成功!')
})

6. stat 方法

参数1: 指定的文件或目录
参数3: 回调函数
调用该方法,可判断文件或目录,若指定的文件或目录不存在,则报错。

fs.stat('index.txt', (err, stats) => {
    if (err) {
        console.log(err)
        return
    }
    console.log('文件:', stats.isFile())		// 文件:true
    console.log('目录:', stats.isDirectory())	// 目录:false
})

7. readdir 方法

参数1: 指定的目录,可指定具体路径,若指定具体路径,路径的文件目录必须存在,否则会报错
参数2: 回调函数
调用该方法,可创建指定的目录。

fs.readdir('news', (err, data) => {
    if (err) {
        console.log(err)
        return
    }
    console.log('读目录成功!', data)		// 读目录成功! [news.text, new.css, other]
})

8. mkdir 方法

参数1: 指定的目录名称
参数2: 回调函数
调用该方法,创建指定的目录。

fs.mkdir('news', err => {
        if (err) {
        console.log(err)
        return
    }
    console.log('创建文件夹成功!')
})

9. rmdir 方法

参数1: 指定的目录
参数2: 回调函数
调用该方法,删除指定的目录,若指定的目录不存在或指定目录存在内容,则会报错。

fs.rmdir('t', err => {
        if (err) {
        console.log(err)
        return
    }
    console.log('删除文件夹成功!')
})

10. createReadStream 方法

当文件比较大时,readFile方法读文件会比较慢,因为readFile一次性读完,性能不佳,建议使用createReadStream方法通过流的方式读取文件。

const readStream = fs.createReadStream('read.txt')
let str = ''
let count = 0	// 记录读取的次数

readStream.on('data', data => {		// 文件流的方式读取数据时是分块读取
    str+=data
    count++
})

readStream.on('end', () => {
    console.log('读文件成功!')
    console.log(str)
    console.log(count)
})

readStream.on('error', () => {
    console.log('读文件失败!')
})

11. createWriteStream 方法

当文件比较大时,writeFile方法写文件会比较慢,因为writeFile一次性写完,性能不佳,建议使用createWriteStream方法通过流的方式写入文件。

const writeStream = fs.createWriteStream('write.txt')

for (let i = 0; i < 1000; i++) {
    writeStream.write('Node.js 从入门到放弃', 'utf8')
}


writeStream.end()

writeStream.on('finish', () => {
    console.log('写入文件成功!')
})

writeStream.on('err', () => {
    console.log('写入文件失败!')
})

通过读文件流pipe方法,可将读取的文件内容复制到指定的文件,如下,将read.txt文件的内容复制到ok.txt文件,若ok.txt文件不存在,则创建ok.txt文件。

const readStream = fs.createReadStream('read.txt')
const writeStream = fs.createWriteStream('ok.txt')
readStream.pipe(writeStream)

小试牛刀

需求1: 判断当前目录是否有upload文件夹,若没有则创建upload文件夹

fs.readdir('./', (err, files) => {
    if (err) {
        console.log('获取当前目录文件列表失败!')
        return
    }
    const upload = files.find(file => file === 'upload')
    if (!upload) {
        fs.mkdir('upload', err => {})
    } else {
        console.log('upload目录已存在')
    }
})

需求2: 获取当前目录下的所有文件,但不包含目录

fs.readdir('./', (err, files) => {
    if (err) {
        console.log('获取当前目录文件列表失败!')
        return
    }
    const result = files.filter(file => fs.statSync(file).isFile())
    console.log('当前目录下的所有文件', result)
})
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:54:08  更:2021-09-19 07:54:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:28:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码