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
相关推荐
火鸟211 分钟前
蛋糕商城 Rust 版介绍二
开发语言·后端·rust·通用代码生成器·蛋糕商城·axum·sqlx
GesLuck43 分钟前
C#控件开发6—旋转按钮
开发语言·javascript·c#
码界筑梦坊1 小时前
基于Flask的当当网畅销图书榜单可视化分析系统的设计与实现
后端·python·flask·毕业设计
程序员小续1 小时前
现代前端工程化实践:高效构建的秘密
开发语言·前端·javascript·vue.js·webpack·前端框架·ecmascript
A__tao1 小时前
在线SQL转xorm struct-GO在线工具集
数据库·sql·golang
赵瑽瑾1 小时前
Lua语言的嵌入式系统
开发语言·后端·golang
霍璟琅1 小时前
Delphi语言的数据可视化
开发语言·后端·golang
JSON_L2 小时前
Vue 响应式渲染 - 列表渲染
前端·javascript·vue.js
User:你的影子2 小时前
WPF进度条渲染
前端·javascript·c#·wpf
霍熠烁2 小时前
Objective-C语言的云计算
开发语言·后端·golang