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
相关推荐
clk660714 分钟前
Spring Boot
java·spring boot·后端
超级土豆粉19 分钟前
从0到1写一个适用于Node.js的User Agent生成库
linux·ubuntu·node.js
Mintopia20 分钟前
光影魔术师的秘密:用 JavaScript 打造软阴影的奇幻世界
前端·javascript·计算机图形学
Mintopia32 分钟前
Three.js 粒子系统:让代码化身奇幻造梦师
前端·javascript·three.js
qq_4084133943 分钟前
spark 执行 hive sql数据丢失
hive·sql·spark
mpr0xy1 小时前
React Router 中 navigate 后浏览器返回按钮不起作用的问题记录
javascript·react.js·浏览器·路由
itwlz1 小时前
vite配置@别名,以及如何让IDE智能提示路经
开发语言·前端·javascript
lichenyang4531 小时前
添加按钮跳转页面并且根据网站的用户状态判断是否显示按钮
开发语言·前端·javascript
皮皮高1 小时前
itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程
android·前端·后端·开源·tv
弱冠少年1 小时前
golang入门
开发语言·后端·golang