Node.js - 文件操作

打印 上一主题 下一主题

主题 685|帖子 685|积分 2055

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x


1. 文件写入

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

  1. const fs = require("fs");
  2. // 写入文件
  3. fs.writeFile('./sentence.txt', "Hello world", error => {
  4.     if (error) {
  5.         console.log("This is failed");
  6.         return;
  7.     } else {
  8.         console.log("Success");
  9.     }
  10. });
复制代码
1.2 同步写入

根据代码次序逐行去实验
  1. fs.writeFileSync('./text.text','输入的文本');
复制代码

1.3 流式写入

流式操作适合处理大文件,避免一次性将文件加载到内存中。
通过写入流对象举行文件的操作处理
  1. //1. 导入fs
  2. const fs = require('fs');
  3. //2. 创建写入流对象
  4. const ws = fs.createWriteStream('text.txt');
  5. ws.write("Hello world");
  6. ws.write("This is my server");
  7. //3. 关闭通道
  8. ws.close();
复制代码

2. 文件读取

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

异步读取传入回调函数,传入错误和数据,实验完对应的文件操作后实验回调函数
  1. const fs = require("fs");
  2. fs.readFile("./sentence.txt",(err,data)=>{
  3.     if(err){
  4.         console.log("This is an error");
  5.         return;
  6.     }
  7.     console.log(data.toString());
  8. });
复制代码
2.2 同步读取

根据代码次序逐行实验
  1. let data = fs.readFileSync("sentence.txt");
  2. console.log(data);
复制代码
2.3 流式读取

将文件分块,逐块读取,利用on绑定变乱,调用回调函数,传入参数chunk,意为块,现实上就是原文件分为的块状文件,每一块内存64k
  1. const rs = fs.createReadStream("video.mp4");
  2. rs.on('data',chunk=>{console.log(chunk,chunk.length);})
复制代码
end可选变乱,读取完毕后调用回调函数 
  1. rs.on('end',()={console.log("读取完毕");})
复制代码

3. 文件追加

3.1 异步追加

追加方式与写入方式一致,实验函数名不一致
  1. fs.appendFile('example.txt', '\nNew content added!', (err) => {
  2.     if (err) {
  3.         console.error('Error appending to file:', err);
  4.         return;
  5.     }
  6.     console.log('Content appended successfully!');
  7. });
复制代码
3.2 同步追加

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

4. 删除文件

4.1 异步删除

  1. fs.unlink('example.txt', (err) => {
  2.     if (err) {
  3.         console.error('Error deleting file:', err);
  4.         return;
  5.     }
  6.     console.log('File deleted successfully!');
  7. });
复制代码
4.2 同步删除

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

5. 复制文件

5.1 readfile操作

  1. const fs = require('fs');
  2. let data = fs.readFileSync('sentence.txt');
  3. fs.writeFileSync('sentence1.txt',data);
复制代码
5.2 流式操作

  1. fs = require('fs');
  2. //流式操作
  3. const rs = fs.createReadStream("sentence.txt"); //创建流式读取器
  4. const ws = fs.createWriteStream("sentence3.txt"); //创建流式写入器
  5. rs.on('data',chunk=>{ws.write(chunk)})
复制代码
5.3 利用管道

流式读取之后通过管道举行流式写入
  1. rs.pipe(ws);
复制代码

6. 文件重定名与移动

重定名的利用方法:
  1. fs.rename(原有路径,新路径,回调函数)
复制代码
  1. const fs = require('fs');
  2. fs.rename("name1.txt","name2.txt",err=>{
  3.     if (error) {console.log("This is an error");return}
  4.     console.log("修改成功");
  5. })
复制代码

7. 文件夹操作

7.1 创建文件夹

不含有sync都默认利用异步方法,文件夹创建函数为mkdir
  1. const fs = require('fs');
  2. fs.mkdir('./html',err=>{
  3.     if (err){
  4.         console.log('error');
  5.         return;
  6.     }
  7.     console.log('创建成功')
  8. })
复制代码
7.2 递归创建

recursive:true表现如果路径中某个文件夹不存在,会递归创建全部必须的文件夹
  1. const fs = require('fs');
  2. fs.mkdir('./html/vue',{recursive:true},err=>{
  3.     if (err){
  4.         console.log('error');
  5.         return;
  6.     }
  7.     console.log('创建成功')
  8. })
复制代码
7.3 读取文件夹

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

  1. fs.rmdir('../资源',(err)=>{
  2.     if (err){console.log("error");return}
  3. })
复制代码
7.5 递归删除 

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

8. 检察资源状态

8.1 异步获取

  1. const fs = require('fs');
  2. fs.stat('./资料',(error,data)=>{
  3.     if (error) {console.log("This is an error");return;}
  4.     console.log(data) //查看相关信息
  5. })
复制代码
8.2 同步获取

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

9. path模块

path模块是Node.js中一个内置模块,用于处理和操作文件路径。它提供了一系列实用方法,能够高效地解析、格式化、拼接和规范化路径。
  1. const path = require("path")
复制代码
· 获取文件名

获取文件名(包括拓展名)
  1. const filePath = '/home/user/documents/file.txt';
  2. console.log(path.basename(filePath)); // 输出: 'file.txt'
  3. console.log(path.basename(filePath, '.txt')); // 输出: 'file'
复制代码
· 拼接路径

resolve拼接规范的绝对路径
  1. const path = require("path")
  2. console.log(path.resolve(__dirname,'./text.txt'));
复制代码
  1. __dirname
复制代码
是Node.js提供的全局变量,表现当前模块文件地点的目次路径
  1. console.log(__dirname);
  2. // 假设文件位于 /home/user/project/index.js
  3. // 输出: /home/user/project
复制代码
· 路径分割

path.sep获取操作体系的路径分隔符
  1. console.log(path.sep);
复制代码
· 路径解析

path.parse解析路径并返回对象
  1. console.log(path.extname(str));
复制代码
  1. const filePath = '/home/user/documents/file.txt';
  2. console.log(path.parse(filePath));
  3. /*
  4. 输出:
  5. {
  6.   root: '/',
  7.   dir: '/home/user/documents',
  8.   base: 'file.txt',
  9.   ext: '.txt',
  10.   name: 'file'
  11. }
  12. */
复制代码
· 路径格式化

格式化为字符串
  1. const pathObject = {
  2.   root: '/',
  3.   dir: '/home/user/documents',
  4.   base: 'file.txt',
  5.   ext: '.txt',
  6.   name: 'file'
  7. };
  8. console.log(path.format(pathObject)); // 输出: '/home/user/documents/file.txt'
复制代码
· 路径目次名

path.dirname获取路径的目次名
  1. const filePath = '/home/user/documents/file.txt';
  2. console.log(path.dirname(filePath)); // 输出: '/home/user/documents'
复制代码
  1. console.log(path.dirname(str));
  2. //输出:所在目录的路径
复制代码
· 文件拓展名

path.extname获取路径的扩展名
  1. const filePath = '/home/user/documents/file.txt';
  2. console.log(path.extname(filePath)); // 输出: '.txt'
复制代码
  1. console.log(path.extname(str));
  2. //eg:输出:js
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

李优秀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表