Node.js - 文件操作

1. 文件写入

文件写入是计算机非常常见的操作,下载文件,安装软件,保存程序日志,视频录制等都使用到了

1.1 异步写入

javascript 复制代码
const fs = require("fs");

// 写入文件
fs.writeFile('./sentence.txt', "Hello world", error => {
    if (error) {
        console.log("This is failed");
        return;
    } else {
        console.log("Success");
    }
});

1.2 同步写入

根据代码顺序逐行去执行

javascript 复制代码
fs.writeFileSync('./text.text','输入的文本');

1.3 流式写入

流式操作适合处理大文件,避免一次性将文件加载到内存中。

通过写入流对象进行文件的操作处理

javascript 复制代码
//1. 导入fs
const fs = require('fs');

//2. 创建写入流对象
const ws = fs.createWriteStream('text.txt'); 

ws.write("Hello world");
ws.write("This is my server");

//3. 关闭通道
ws.close();

2. 文件读取

文件读取的场景多种多样,包括电脑开机,程序运行,编辑器打开文件,播放视频,git查看日志等,查看聊天记录

2.1 异步读取

异步读取传入回调函数,传入错误和数据,执行完对应的文件操作后执行回调函数

javascript 复制代码
const fs = require("fs");

fs.readFile("./sentence.txt",(err,data)=>{
    if(err){
        console.log("This is an error");
        return;
    }
    console.log(data.toString());
});

2.2 同步读取

根据代码顺序逐行执行

javascript 复制代码
let data = fs.readFileSync("sentence.txt");
console.log(data);

2.3 流式读取

将文件分块,逐块读取,使用on绑定事件,调用回调函数,传入参数chunk,意为块,实际上就是原文件分为的块状文件,每一块内存64k

javascript 复制代码
const rs = fs.createReadStream("video.mp4");

rs.on('data',chunk=>{console.log(chunk,chunk.length);})

end可选事件,读取完毕后调用回调函数

javascript 复制代码
rs.on('end',()={console.log("读取完毕");})

3. 文件追加

3.1 异步追加

追加方式与写入方式一致,执行函数名不一致

javascript 复制代码
fs.appendFile('example.txt', '\nNew content added!', (err) => {
    if (err) {
        console.error('Error appending to file:', err);
        return;
    }
    console.log('Content appended successfully!');
});

3.2 同步追加

javascript 复制代码
try {
    fs.appendFileSync('example.txt', '\nNew content added!');
    console.log('Content appended successfully!');
} catch (err) {
    console.error('Error appending to file:', err);
}

4. 删除文件

4.1 异步删除

javascript 复制代码
fs.unlink('example.txt', (err) => {
    if (err) {
        console.error('Error deleting file:', err);
        return;
    }
    console.log('File deleted successfully!');
});

4.2 同步删除

javascript 复制代码
try {
    fs.unlinkSync('example.txt');
    console.log('File deleted successfully!');
} catch (err) {
    console.error('Error deleting file:', err);
}

5. 复制文件

5.1 readfile操作

javascript 复制代码
const fs = require('fs');
let data = fs.readFileSync('sentence.txt');
fs.writeFileSync('sentence1.txt',data);

5.2 流式操作

javascript 复制代码
fs = require('fs');
//流式操作
const rs = fs.createReadStream("sentence.txt"); //创建流式读取器
const ws = fs.createWriteStream("sentence3.txt"); //创建流式写入器
rs.on('data',chunk=>{ws.write(chunk)})

5.3 使用管道

流式读取之后通过管道进行流式写入

javascript 复制代码
rs.pipe(ws);

6. 文件重命名与移动

重命名的使用方法:

javascript 复制代码
fs.rename(原有路径,新路径,回调函数)
javascript 复制代码
const fs = require('fs');

fs.rename("name1.txt","name2.txt",err=>{
    if (error) {console.log("This is an error");return}
    console.log("修改成功");
})

7. 文件夹操作

7.1 创建文件夹

不含有sync都默认使用异步方法,文件夹创建函数为mkdir

javascript 复制代码
const fs = require('fs');
fs.mkdir('./html',err=>{
    if (err){
        console.log('error');
        return;
    }
    console.log('创建成功')
})

7.2 递归创建

recursive:true表示如果路径中某个文件夹不存在,会递归创建所有必须的文件夹

javascript 复制代码
const fs = require('fs');
fs.mkdir('./html/vue',{recursive:true},err=>{
    if (err){
        console.log('error');
        return;
    }
    console.log('创建成功')
})

7.3 读取文件夹

javascript 复制代码
fs.readdir('../资源',(err,data)=>{
    if (err){console.log("error");return}
    console.log(data) //获取当前文件夹中内容
})

7.4 删除文件夹

javascript 复制代码
fs.rmdir('../资源',(err)=>{
    if (err){console.log("error");return}
})

7.5 递归删除

javascript 复制代码
fs.rm('../资源',{recursive:true},(err)=>{
    if (err){console.log("error");return}
})

8. 查看资源状态

8.1 异步获取

javascript 复制代码
const fs = require('fs');

fs.stat('./资料',(error,data)=>{
    if (error) {console.log("This is an error");return;}
    console.log(data) //查看相关信息
})

8.2 同步获取

javascript 复制代码
try {
    const stats = fs.statSync('example.txt');
    console.log('File stats:', stats);
} catch (err) {
    console.error('Error getting file stats:', err);
}

9. path模块

path模块是Node.js中一个内置模块,用于处理和操作文件路径。它提供了一系列实用方法,能够高效地解析、格式化、拼接和规范化路径。

javascript 复制代码
const path = require("path")

· 获取文件名

获取文件名(包括拓展名)

javascript 复制代码
const filePath = '/home/user/documents/file.txt';
console.log(path.basename(filePath)); // 输出: 'file.txt'
console.log(path.basename(filePath, '.txt')); // 输出: 'file'

· 拼接路径

resolve拼接规范的绝对路径

javascript 复制代码
const path = require("path")
console.log(path.resolve(__dirname,'./text.txt'));
javascript 复制代码
__dirname

是Node.js提供的全局变量,表示当前模块文件所在的目录路径

javascript 复制代码
console.log(__dirname);
// 假设文件位于 /home/user/project/index.js
// 输出: /home/user/project

· 路径分割

path.sep获取操作系统的路径分隔符

javascript 复制代码
console.log(path.sep);

· 路径解析

path.parse解析路径并返回对象

javascript 复制代码
console.log(path.extname(str));
javascript 复制代码
const filePath = '/home/user/documents/file.txt';
console.log(path.parse(filePath));
/*
输出:
{
  root: '/',
  dir: '/home/user/documents',
  base: 'file.txt',
  ext: '.txt',
  name: 'file'
}
*/

· 路径格式化

格式化为字符串

javascript 复制代码
const pathObject = {
  root: '/',
  dir: '/home/user/documents',
  base: 'file.txt',
  ext: '.txt',
  name: 'file'
};
console.log(path.format(pathObject)); // 输出: '/home/user/documents/file.txt'

· 路径目录名

path.dirname获取路径的目录名

javascript 复制代码
const filePath = '/home/user/documents/file.txt';
console.log(path.dirname(filePath)); // 输出: '/home/user/documents'
javascript 复制代码
console.log(path.dirname(str));
//输出:所在目录的路径

· 文件拓展名

path.extname获取路径的扩展名

javascript 复制代码
const filePath = '/home/user/documents/file.txt';
console.log(path.extname(filePath)); // 输出: '.txt'
javascript 复制代码
console.log(path.extname(str));
//eg:输出:js
相关推荐
程序饲养员7 分钟前
React从前的SPA(CSR)到现在的SSR和SSG原理解析
前端·javascript·前端框架
不懂装懂的不懂8 分钟前
【 vue + js 】引入图片、base64 编译显示图片
前端·javascript·vue.js
东方醴歌1 小时前
VMware安装飞牛私有云fnOS并挂载小雅Alist实现异地远程访问
开发语言·后端·golang
搏博1 小时前
在WPS中通过JavaScript宏(JSA)调用DeepSeek官网API优化文档教程
javascript·人工智能·windows·深度学习·机器学习·wps
她说彩礼65万1 小时前
Asp.NET Core WebApi 创建带鉴权机制的Api
后端·asp.net
bobz9651 小时前
qemu ovs tap down
后端
uhakadotcom1 小时前
简单理解 x402 支付协议
后端·架构·github
shepherd1261 小时前
从零搭建高可用Kafka集群与EFAK监控平台:全流程实战总结
分布式·后端·kafka
BillKu1 小时前
el-input 中 select 方法使用报错:属性“select”在类型“HTMLElement”上不存在
前端·javascript·vue.js·elementui