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

【js】Node.js的fs的使用方法

当然!Node.js 的 fs 模块提供了与文件系统进行交互的功能。以下是一些常见的操作示例代码:

1. 读取文件内容

异步读取文件
const fs = require('fs');fs.readFile('example.txt', 'utf8', (err, data) => {if (err) {console.error(err);return;}console.log(data);
});
同步读取文件
const fs = require('fs');try {const data = fs.readFileSync('example.txt', 'utf8');console.log(data);
} catch (err) {console.error(err);
}

2. 写入文件内容

异步写入文件
const fs = require('fs');const content = 'Some content to write into the file';fs.writeFile('example.txt', content, 'utf8', (err) => {if (err) {console.error(err);return;}console.log('File has been written');
});
同步写入文件
const fs = require('fs');const content = 'Some content to write into the file';try {fs.writeFileSync('example.txt', content, 'utf8');console.log('File has been written');
} catch (err) {console.error(err);
}

3. 追加内容到文件

异步追加内容
const fs = require('fs');const content = '\nAdditional content to append';fs.appendFile('example.txt', content, 'utf8', (err) => {if (err) {console.error(err);return;}console.log('Content has been appended');
});
同步追加内容
const fs = require('fs');const content = '\nAdditional content to append';try {fs.appendFileSync('example.txt', content, 'utf8');console.log('Content has been appended');
} catch (err) {console.error(err);
}

4. 删除文件

异步删除文件
const fs = require('fs');fs.unlink('example.txt', (err) => {if (err) {console.error(err);return;}console.log('File has been deleted');
});
同步删除文件
const fs = require('fs');try {fs.unlinkSync('example.txt');console.log('File has been deleted');
} catch (err) {console.error(err);
}

5. 创建目录

异步创建目录
const fs = require('fs');fs.mkdir('exampleDir', { recursive: true }, (err) => {if (err) {console.error(err);return;}console.log('Directory has been created');
});
同步创建目录
const fs = require('fs');try {fs.mkdirSync('exampleDir', { recursive: true });console.log('Directory has been created');
} catch (err) {console.error(err);
}

6. 读取目录内容

异步读取目录
const fs = require('fs');fs.readdir('exampleDir', (err, files) => {if (err) {console.error(err);return;}console.log(files);
});
同步读取目录
const fs = require('fs');try {const files = fs.readdirSync('exampleDir');console.log(files);
} catch (err) {console.error(err);
}

7. 设置文件权限

异步设置文件权限
const fs = require('fs');fs.chmod('example.txt', 0o755, (err) => {if (err) {console.error(err);return;}console.log('File permissions have been changed');
});
同步设置文件权限
const fs = require('fs');try {fs.chmodSync('example.txt', 0o755);console.log('File permissions have been changed');
} catch (err) {console.error(err);
}

8. 文件流操作

读取文件流
const fs = require('fs');const readStream = fs.createReadStream('example.txt', 'utf8');readStream.on('data', (chunk) => {console.log(chunk);
});readStream.on('end', () => {console.log('No more data to read');
});readStream.on('error', (err) => {console.error(err);
});
写入文件流
const fs = require('fs');const writeStream = fs.createWriteStream('example.txt');writeStream.write('This is the first line\n');
writeStream.write('This is the second line\n');
writeStream.end('This is the last line\n');writeStream.on('finish', () => {console.log('All writes are now complete.');
});writeStream.on('error', (err) => {console.error(err);
});

9. 监视文件变化

监视文件
const fs = require('fs');fs.watch('example.txt', (eventType, filename) => {if (filename) {console.log(`${filename} file Changed: ${eventType}`);}
});
监视目录
const fs = require('fs');fs.watch('exampleDir', (eventType, filename) => {if (filename) {console.log(`${filename} file Changed: ${eventType}`);}
});

10. 读取文件状态(获取文件信息)

异步读取文件状态
const fs = require('fs');fs.stat('example.txt', (err, stats) => {if (err) {console.error(err);return;}console.log(`File Size: ${stats.size}`);console.log(`File Permissions: ${stats.mode}`);console.log(`Is File: ${stats.isFile()}`);console.log(`Is Directory: ${stats.isDirectory()}`);
});
同步读取文件状态
const fs = require('fs');try {const stats = fs.statSync('example.txt');console.log(`File Size: ${stats.size}`);console.log(`File Permissions: ${stats.mode}`);console.log(`Is File: ${stats.isFile()}`);console.log(`Is Directory: ${stats.isDirectory()}`);
} catch (err) {console.error(err);
}

11. 重命名文件或目录

异步重命名
const fs = require('fs');fs.rename('oldName.txt', 'newName.txt', (err) => {if (err) {console.error(err);return;}console.log('File has been renamed');
});
同步重命名
const fs = require('fs');try {fs.renameSync('oldName.txt', 'newName.txt');console.log('File has been renamed');
} catch (err) {console.error(err);
}

12. 删除目录

异步删除目录
const fs = require('fs');fs.rmdir('exampleDir', { recursive: true }, (err) => {if (err) {console.error(err);return;}console.log('Directory has been deleted');
});
同步删除目录
const fs = require('fs');try {fs.rmdirSync('exampleDir', { recursive: true });console.log('Directory has been deleted');
} catch (err) {console.error(err);
}

13. 复制文件

异步复制文件
const fs = require('fs');fs.copyFile('source.txt', 'destination.txt', (err) => {if (err) {console.error(err);return;}console.log('File has been copied');
});
同步复制文件
const fs = require('fs');try {fs.copyFileSync('source.txt', 'destination.txt');console.log('File has been copied');
} catch (err) {console.error(err);
}

14. 移动文件(通过重命名实现)

异步移动文件
const fs = require('fs');fs.rename('source.txt', 'destination.txt', (err) => {if (err) {console.error(err);return;}console.log('File has been moved');
});
同步移动文件
const fs = require('fs');try {fs.renameSync('source.txt', 'destination.txt');console.log('File has been moved');
} catch (err) {console.error(err);
}

15. 使用 fs.promises 进行异步操作

Node.js 提供了 fs.promises API,使得文件系统操作可以使用 async/await 语法。

读取文件内容
const fs = require('fs').promises;async function readFile() {try {const data = await fs.readFile('example.txt', 'utf8');console.log(data);} catch (err) {console.error(err);}
}readFile();
写入文件内容
const fs = require('fs').promises;async function writeFile() {try {await fs.writeFile('example.txt', 'Some content to write into the file', 'utf8');console.log('File has been written');} catch (err) {console.error(err);}
}writeFile();
追加内容到文件
const fs = require('fs').promises;async function appendFile() {try {await fs.appendFile('example.txt', '\nAdditional content to append', 'utf8');console.log('Content has been appended');} catch (err) {console.error(err);}
}appendFile();
删除文件
const fs = require('fs').promises;async function deleteFile() {try {await fs.unlink('example.txt');console.log('File has been deleted');} catch (err) {console.error(err);}
}deleteFile();
创建目录
const fs = require('fs').promises;async function createDirectory() {try {await fs.mkdir('exampleDir', { recursive: true });console.log('Directory has been created');} catch (err) {console.error(err);}
}createDirectory();
读取目录内容
const fs = require('fs').promises;async function readDirectory() {try {const files = await fs.readdir('exampleDir');console.log(files);} catch (err) {console.error(err);}
}readDirectory();

16. 处理文件系统的错误

在处理文件系统操作时,处理错误是非常重要的。以下是一些常见的错误处理示例:

异步操作中的错误处理
const fs = require('fs');fs.readFile('nonexistent.txt', 'utf8', (err, data) => {if (err) {if (err.code === 'ENOENT') {console.error('File not found');} else {console.error(err);}return;}console.log(data);
});
同步操作中的错误处理
const fs = require('fs');try {const data = fs.readFileSync('nonexistent.txt', 'utf8');console.log(data);
} catch (err) {if (err.code === 'ENOENT') {console.error('File not found');} else {console.error(err);}
}
使用 fs.promises 的错误处理
const fs = require('fs').promises;async function readFile() {try {const data = await fs.readFile('nonexistent.txt', 'utf8');console.log(data);} catch (err) {if (err.code === 'ENOENT') {console.error('File not found');} else {console.error(err);}}
}readFile();

相关文章:

  • Spring源码学习:SpringMVC(3)mvcannotation-driven标签解析【RequestMappingHandlerMapping生成】
  • 技术成神之路:设计模式(十六)代理模式
  • Python库matplotlib之五
  • 【RabbitMq源码阅读】分析RabbitMq发送消息源码
  • Robot Operating System——一组三维空间中的位姿(位置和方向)
  • Flink集群部署
  • kafka下载配置
  • Go 1.19.4 序列化和反序列化-Day 16
  • 速盾:视频开cdn合适还是视频点播合适?
  • 大模型智能体在金融公告理解领域的应用 | OPENAIGC开发者大赛高校组AI创新之星奖
  • 语音音频(wav)声纹识别-技术实现-python
  • 【JavaEE初阶】网络原理
  • 性能优化与资源管理:优化Selenium脚本的执行效率,合理管理浏览器实例和系统资源
  • CSS给一行按钮统一设置间隔
  • DarkLabel2.4版本导入MOT17数据集
  • Angular 响应式表单之下拉框
  • Docker入门(二) - Dockerfile
  • HTTP中GET与POST的区别 99%的错误认识
  • JAVA多线程机制解析-volatilesynchronized
  • js面向对象
  • js中forEach回调同异步问题
  • nfs客户端进程变D,延伸linux的lock
  • python_bomb----数据类型总结
  • Swoft 源码剖析 - 代码自动更新机制
  • ubuntu 下nginx安装 并支持https协议
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 网络应用优化——时延与带宽
  • 一、python与pycharm的安装
  • 因为阿里,他们成了“杭漂”
  • 用element的upload组件实现多图片上传和压缩
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • k8s使用glusterfs实现动态持久化存储
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 选择阿里云数据库HBase版十大理由
  • ​如何使用QGIS制作三维建筑
  • #在 README.md 中生成项目目录结构
  • (8)STL算法之替换
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (八)Flask之app.route装饰器函数的参数
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (四)库存超卖案例实战——优化redis分布式锁
  • (一)RocketMQ初步认识
  • (译)计算距离、方位和更多经纬度之间的点
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .bat文件调用java类的main方法
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET 给NuGet包添加Readme
  • .net打印*三角形
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • /deep/和 >>>以及 ::v-deep 三者的区别