nodejs之fs模块学习

01_认识模块

** 概 念**

  • 全称:file system =》文件系统
  • fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动,还有文件的写入、读取,以及文件夹的相关操作

02_文件写入

方法说明
writeFile异步写入
writeFileSync同步写入
appendFile/appendFileSync追加写入
createWriteStream流式写入

writeFile 异步写入

语法: fs.writeFile(file,data,[…option],callback)

参数说明:

  • file 文件名
  • data 待写入的数据
  • option 选项设置 (可选)
  • callback 写入回调

返回值 : undefined

代码示例:

//异步写入
fs.writeFile('./../file/座右铭.txt','不要指望一口气吃成一个大胖子',err=>{
    //err 写入失败:是一个错误对象 写入成功:null
    // js线程 和 i/o线程(写入磁盘) 异步进行
    if (err) {
        console.log('写入失败');
        return;
    }
    console.log('写入成功');
})

writeFileSync 同步写入

语法: fs.writeFile(file,data,[…option],callback)

参数说明:

  • file 文件名
  • data 待写入的数据
  • option 选项设置 (可选)

代码示例:

// 同步写入
fs.writeFileSync('./../file/同步写入.txt','同步写入')

appendFile 异步追加写入

语法: fs.appendFile(file,data,[…option],callback)

参数说明:

  • file 追加文件名
  • data 待写入的数据
  • option 选项设置 (可选)
  • callback 写入回调

返回值 : undefined

代码示例:

//异步追加写入
fs.appendFile('./../file/座右铭.txt','慢慢学,每天进步一点', err=>{
    if(err){
        console.log('追加写入失败');
    }
    console.log('追加写入成功');
})
// writeFile()实现文件的追加写入
fs.writeFile('./../file/座右铭.txt', 'writeFile()实现文件的追加写入',{flag:'a'},err=>{
    if(err){
        console.log('追加写入失败');
    }
    console.log('追加写入成功');
})

appendFileSync 同步追加写入

appendFileSync 同步追加写入

语法: fs.appendFileSync(file,data,[…option],callback)

参数说明:

  • file 追加文件名
  • data 待写入的数据
  • option 选项设置 (可选)

代码示例:

// 同步追加写入 使用\r\n换行
fs.appendFileSync('./../file/座右铭.txt','\r\n2023.7.13')

createWriteStream 流式写入

语法:fs.createWriteStream(path,[…options])

参数说明:

  • path 文件路径
  • options 选项配置 (可选)

返回值:Object

代码示例:

// createWriteStream 流式写入
let ws = fs.createWriteStream('./../file/春晓.txt');
ws.write('春眠不觉晓\r\n');
ws.write('处处闻啼鸟\r\n');
ws.write('夜来风雨声\r\n');
ws.write('花落知多少\r\n');
ws.close();

使用背景:程序打开一个文件是需要消耗资源的,流式写入可以减少打开关闭文件的次数。流式写入方式适用于大文件写入或者频繁写入的场景,writeFile适合于写入频率较低的场景

写入文件的场景
当需要要持久话保存数据的时候,应该想到文件写入

  • 下载文件
  • 安装软件
  • 保存程序日志,如Git
  • 编辑器保存文件

03_文件读取

方法说明
readFile异步读取
readFileSync同步读取
createReadStream流式读取

readFile 异步读取

语法:fs.readFile (path,[…options],callback)

参数说明:

  • path 文件路径
  • options 选项配置 (可选)
  • callback 回调函数

返回值:undefined

代码示例:

fs.readFile('./../file/春晓.txt',(err,data)=>{
    if(err){
        console.log('读取失败');
    }
    // console.log('读取成功', data);
    console.log('读取成功', data.toString());
})

readFileSync 同步读取

语法:fs.readFileSync (path,[…options])
参数说明:

  • path 文件路径
  • options 选项配置 (可选)

代码示例:

let data = fs.readFileSync('./../file/春晓.txt')
// console.log(data,'同步读取');
console.log(data.toString(),'同步读取');

createReadStream 流式读取

语法:fs.createReadStream (path)

参数说明:

  • path 文件路径

代码示例:

const rs = fs.createReadStream('./../file/春晓.txt')
rs.on('data', chunk=>{
    // console.log(chunk);  
    console.log(chunk.length); // 如果字符长度过长,没次最大读取 65536字节 =》 64KB
});
// 读取完毕之后 会触发end事件
rs.on('end',()=>{
    console.log('读取完成');
})

03_文件重命名和移动

语法:fs.rename(path1,path2,callback)

参数说明:

  • path1 需要修改的文件名地址
  • path2 ‘修改之后文件的地址名’
  • callback 回调函数

代码示例:

// 文件重命名
const fs = require('fs');
fs.rename('./../file/春晓.txt','./../file/春天来了.txt',err=>{
    if(err){
        console.log('重命名失败')
    }
    console.log('重命名成功');
})
// 文件的移动
fs.rename('./../file/春天来了.txt','./春天来了.txt',err=>{
    if(err){
        console.log('重命名失败')
    }
    console.log('重命名成功');
})
renameSync //同步操作

04_文件删除

语法:①fs.unlink(path1,callback) 同步的方法是 unlinkSync

​ ②fs.rm(path1,callback) 同步的方法是 rmSync

参数说明:

  • path 删除的文件地址
  • callback回调函数

代码示例:

// unlink进行删除 unlinkSync
let fs  = require('fs');
fs.unlink('./春天来了.txt', err=>{
    if(err){
        console.log('删除失败');
        return;
    }
    console.log('删除成功');
})
// 使用rm进行删除 node 14.4新引入的方法 rmSync
fs.rm('./复制春晓.txt',err=>{
    if(err){
        console.log('删除失败');
        return;
    }
    console.log('删除成功');
})

05_文件夹操作

方法说明
mkdir/mkdirSync创建文件夹
readdir/readdirSync读取文件夹
rmdir/rmdirSync删除文件夹

代码示例:

// 导入 fs模块
const fs = require("fs");

// 异步创建文件夹
fs.mkdir("./../createfile", (err) => {
  if (err) {
    console.log("创建失败");
  } else {
    console.log("创建成功");
  }
});

// 递归创建
fs.mkdir('./../a/b/c', {recursive: true}, err => {
  if(err) {
    console.log('创建失败~');
    return;
  }
  console.log("创建成功");
})

// 读取文件夹
fs.readdir("./../file", (err, data) => {
  if (err) {
    console.log("读取失败~");
    return;
  }
  console.log("读取成功", data);  //  data =>  [ '同步写入.txt', '复制春晓1.txt', '座右铭.txt' ]
});

// 删除文件夹
fs.rmdir('./../createfile', err => {
  if(err) {
    console.log('删除失败');
    return;
  }
  console.log('删除成功');
})

// 递归删除 recursive=> 递归  不建议使用
fs.rmdir('./../a', {recursive: true}, err => {
  if(err){
    console.log(err, '删除失败');
    return;
  }
  console.log('删除成功~');
})

// 建议使用
fs.rm("./../a", { recursive: true }, (err) => {
  if (err) {
    console.log("删除失败~");
    return;
  }
  console.log("删除成功");
});

查看文件夹状态

const fs = require("fs");

fs.stat("./../file/复制春晓1.txt", (err, data) => {
  if (err) {
    console.log("查看文件状态失败");
    return;
  }
  // console.log('查看成功', data);
  // isFile  检测目标资源是否是文件
  console.log(data.isFile());
  // isDirectory 检测目标资源是否是文件夹
  console.log(data.isDirectory());
});
/**
 * Stats {
  dev: 2424516231, 
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: 4096,
  ino: 12947848928979052,
  size: 68,
  blocks: 0,
  atimeMs: 1693744555840.2776,
  mtimeMs: 1689687894761.985,
  ctimeMs: 1691924572289.957,
  birthtimeMs: 1689687894758.4265,
  atime: 2023-09-03T12:35:55.840Z,
  mtime: 2023-07-18T13:44:54.762Z,
  ctime: 2023-08-13T11:02:52.290Z,
  birthtime: 2023-07-18T13:44:54.758Z
}
 */

06_相对路径和绝对路径

// 导入fs模块
const fs = require('fs');

// 相对路径   ./座右铭.txt  当前目录下的座右铭   => 等效于座右铭.txt  
// ../当前目录的上一级目录中的座右铭.txt
// fs.writeFileSync('座右铭.txt', 'love');
// fs.writeFileSync('座右铭1.txt', 'love');
// fs.writeFileSync('../座右铭1.txt', 'love');

// 绝对路径  ~

// __dirname 与 require 类似, 都是Node.js环境中的‘全局’变量,保存着当前所在路径的绝对路径
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值