Node.js学习笔记(四) --- fs模块的使用
目录
1. fs.stat 检测是文件还是目录 2. fs.mkdir 创建目录 3. fs.writeFile 创建写入文件 4. fs.appendFile 追加文件 5. fs.readFile 读取文件 6. fs.readdir 读取目录 7. fs.rename 重命名 8. fs.rmdir 删除目录 9. fs.unlink 删除文件 10. fs.createReadStream 从文件流中读取数据 11. fs.createWriteStream 写入文件 12. 管道流
0.引入fs模块
1 | var fs=require( 'fs' ); |
1. fs.stat 检测是文件还是目录
1 2 3 4 5 6 7 8 9 10 11 | fs.stat( 'html/style.css' , function (err, stats) { if (err) { console.log(err); return false ; } console.log( '文件:' + stats.isFile()); // true console.log( '目录:' + stats.isDirectory()); // false }) |
2. fs.mkdir 创建目录
//接收参数: //path 将创建的目录路径 //mode 目录权限(读写权限),默认0777 //callback 回调,传递异常参数err
1 2 3 4 5 6 7 | fs.mkdir( 'css' , function (err) { if (err) { console.log(err); return false ; } console.log( '创建目录成功' ); }) |
3. fs.writeFile 创建写入文件
//filename (String) 文件名称 //data (String | Buffer) 将要写入的内容,可以使字符串 或 buffer数据。 //options (Object) option数组对象,包含: //· encoding (string) 可选值,默认 ‘utf8′,当data使buffer时,该值应该为 ignored。 //· mode (Number) 文件读写权限,默认值 438 //· flag (String) 默认值 ‘w' //callback {Function} 回调,传递一个异常参数err。
1 2 3 4 5 6 7 | fs.writeFile( 't.txt' , '你好nodejs' , 'utf8' , function (err) { if (err) { console.log(err); return false ; } console.log( '写入成功' ); }) |
4. fs.appendFile 追加文件
1 2 3 4 5 6 7 | fs.appendFile( 't.txt' , '这是追加的内容' , function (err) { if (err) { console.log(err); return false ; } console.log( '写入成功' ); }) |
5.fs.readFile 读取文件
1 2 3 4 5 6 7 8 | fs.readFile( 't.txt' , function (err, data) { if (err) { console.log(err); return false ; } console.log(data); console.log(data.toString()); }) |
6.fs.readdir 读取目录
把目录下面的文件和文件夹都获取到
1 2 3 4 5 6 7 | fs.readdir( 'html' , function (err, data) { if (err) { console.log(err); return false ; } console.log(data); }) |
7.fs.rename 重命名
1、改名 2、剪切文件
1、改名
1 2 3 4 5 6 7 | fs.rename( 'html/index.html' , 'html/news.html' , function (err) { if (err) { console.log(err); return false ; } console.log( '修改名字成功' ); }) |
2、剪切文件
1 2 3 4 5 6 7 | fs.rename( 'html/style.css' , 'html/test/basic.css' , function (err) { if (err) { console.log(err); return false ; } console.log( '剪切成功' ); }) |
8. fs.rmdir 删除目录
这个方法只能删除目录,不可以删除文件
删除空目录
1 2 3 4 5 6 7 | fs.rmdir( 'css' , function (err) { if (err) { console.log(err); return false ; } console.log( '删除目录成功' ); }) |
9. fs.unlink 删除文件
1 2 3 4 5 6 7 | fs.unlink( 'css/1.js' , function (err) { if (err) { console.log(err); return false ; } console.log( '删除文件成功' ); }) |
10. fs.createReadStream 从文件流中读取数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //流的方式读取文件 var readStream = fs.createReadStream( 'input.txt' ); var str = '' ; //保存数据 var count = 0; //次数 readStream.on( 'data' , function (chunk) { str += chunk; count++; }) //读取完成 readStream.on( 'end' , function (chunk) { console.log(count); console.log(str); }) //读取失败 readStream.on( 'error' , function (err) { console.log(err); }) |
11. fs.createWriteStream 写入文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var data = '我是从数据库获取的数据,我要保存起来\n' ; // 创建一个可以写入的流,写入到文件 output.txt 中 var writerStream = fs.createWriteStream( 'output.txt' ); for ( var i = 0; i < 100; i++) { writerStream.write(data, 'utf8' ); } //标记写入完成 writerStream.end(); writerStream.on( 'finish' , function () { console.log( '写入完成' ); }) //失败 writerStream.on( 'error' , function () { console.log( '写入失败' ); }) |
12. 管道流
管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传递到另外一个流中。
如上面的图片所示,我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。
以下实例我们通过读取一个文件内容并将内容写入到另外一个文件中。
1 2 3 4 5 6 7 8 | // 创建一个可读流 var readerStream = fs.createReadStream( 'input.txt' ); // 创建一个可写流 var writerStream = fs.createWriteStream( 'output.txt' ); // 管道读写操作 // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中 readerStream.pipe(writerStream); console.log( "程序执行完毕" ); |
Demo
1、判断服务器上面有没有upload目录。没有创建这个目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | var fs = require( 'fs' ); fs.stat( 'upload' , function (err, stats) { if (err) { // 没有这个目录 fs.mkdir( 'upload' , function (error) { if (error) { console.log(error); return false ; } console.log( '创建成功' ); }) } else { console.log( '目录已经存在' ); console.log(stats.isDirectory()); } }) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2017-09-27 手机UA识别