当前位置: 首页 > article >正文

Node.js - 文件操作

1. 文件写入

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

1.1 异步写入

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 同步写入

根据代码顺序逐行去执行

fs.writeFileSync('./text.text','输入的文本');

1.3 流式写入

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

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

//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 异步读取

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

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 同步读取

根据代码顺序逐行执行

let data = fs.readFileSync("sentence.txt");
console.log(data);

2.3 流式读取

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

const rs = fs.createReadStream("video.mp4");

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

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

rs.on('end',()={console.log("读取完毕");})

3. 文件追加

3.1 异步追加

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

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 同步追加

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 异步删除

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

4.2 同步删除

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

5. 复制文件

5.1 readfile操作

const fs = require('fs');
let data = fs.readFileSync('sentence.txt');
fs.writeFileSync('sentence1.txt',data);

5.2 流式操作

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

5.3 使用管道

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

rs.pipe(ws);

6. 文件重命名与移动

重命名的使用方法:

fs.rename(原有路径,新路径,回调函数)
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

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

7.2 递归创建

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

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

7.3 读取文件夹

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

7.4 删除文件夹

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

7.5 递归删除 

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

8. 查看资源状态

8.1 异步获取

const fs = require('fs');

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

8.2 同步获取

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中一个内置模块,用于处理和操作文件路径。它提供了一系列实用方法,能够高效地解析、格式化、拼接和规范化路径。

const path = require("path")

· 获取文件名

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

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

· 拼接路径

resolve拼接规范的绝对路径

const path = require("path")
console.log(path.resolve(__dirname,'./text.txt'));
__dirname

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

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

· 路径分割

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

console.log(path.sep);

· 路径解析

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

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

· 路径格式化

格式化为字符串

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获取路径的目录名

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

· 文件拓展名

path.extname获取路径的扩展名

const filePath = '/home/user/documents/file.txt';
console.log(path.extname(filePath)); // 输出: '.txt'
console.log(path.extname(str));
//eg:输出:js


http://www.kler.cn/a/466854.html

相关文章:

  • GPT分区 使用parted标准分区划分,以及相邻分区扩容
  • 3125: 【入门】求1/1+1/2+2/3+3/5+5/8+8/13+13/21……的前n项的和
  • Nginx (40分钟学会,快速入门)
  • 『SQLite』几种向表中插入数据的方法
  • 周末总结(2024/01/04)
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(24):椭圆曲线密码学
  • C++例程:使用其I/O模拟IIC接扣(2)
  • 电脑更新后无法连接网络怎么解决 网络恢复方法
  • Transformer中Self-Attention以及Multi-Head Attention模块详解(附pytorch实现)
  • web漏洞之文件包含漏洞
  • [网络安全]DVWA之SQL注入—low level解题详析
  • Spring Boot自动装配代码详解
  • python +tkinter绘制彩虹和云朵
  • 2025年股指期货每月什么时候交割?
  • 探索光耦:光耦在风力发电中的应用——保障绿色能源的高效与安全
  • ubuntu16 重启之后lvm信息丢失故障恢复
  • Eureka 介绍与原理详解
  • 记录:导出功能:接收文件流数据进行导出(vue3)
  • Jdk动态代理源码缓存优化比较(JDK17比JDK8)
  • 推荐一些关于C#中LINQ的学习资料
  • Qt窗口获取Tftpd32_svc服务下载信息
  • [redux] ts声明useSelector和useDispatch
  • 嵌入式 Linux LED 驱动开发实验
  • 运维工具汇总
  • 【数据分析实战】24年T4某二手车交易平台数据分析
  • 【机器学习】【朴素贝叶斯分类器】从理论到实践:朴素贝叶斯分类器在垃圾短信过滤中的应用