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
相关推荐
ByteBlossom66610 分钟前
Go语言的数据库交互
开发语言·后端·golang
续亮~31 分钟前
Kafka核心参数与使用02
java·分布式·后端·kafka
匹马夕阳36 分钟前
vue3中onUpdated钩子函数和nextTick的具体使用场景和区别
前端·javascript·vue.js
前端7739 分钟前
vue管理后台搭建
前端·javascript·vue.js
续亮~44 分钟前
Spring Boot 项目中集成 Kafka-03
java·spring boot·后端·kafka
xunie1 小时前
Shutil 库 2025 使用教程python在处理excel方面具有非常优秀的功能,可以根据实际业务流程需要进行精准定制exe执行文件,一键批理提取数据,提
javascript
未来之窗软件服务1 小时前
软件架构设计——通用表单UI-提示确认框—未来之窗行业应用跨平台架构
前端·javascript·ui
csdn_aspnet1 小时前
在 ASP.NET CORE 中上传、下载文件
后端·asp.net·.netcore
weisian1511 小时前
Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)
sql·mysql
ByteBlossom6661 小时前
Swift语言的语法糖
开发语言·后端·golang