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模块
var fs=require('fs');
1. fs.stat 检测是文件还是目录
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
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。
fs.writeFile('t.txt', '你好nodejs', 'utf8', function (err) { if (err) { console.log(err); return false; } console.log('写入成功'); })
4. fs.appendFile 追加文件
fs.appendFile('t.txt', '这是追加的内容', function (err) { if (err) { console.log(err); return false; } console.log('写入成功'); })
5.fs.readFile 读取文件
fs.readFile('t.txt', function (err, data) { if (err) { console.log(err); return false; } console.log(data); console.log(data.toString()); })
6.fs.readdir 读取目录
把目录下面的文件和文件夹都获取到
fs.readdir('html', function (err, data) { if (err) { console.log(err); return false; } console.log(data); })
7.fs.rename 重命名
1、改名 2、剪切文件
1、改名
fs.rename('html/index.html', 'html/news.html', function (err) { if (err) { console.log(err); return false; } console.log('修改名字成功'); })
2、剪切文件
fs.rename('html/style.css', 'html/test/basic.css', function (err) { if (err) { console.log(err); return false; } console.log('剪切成功'); })
8. fs.rmdir 删除目录
这个方法只能删除目录,不可以删除文件
删除空目录
fs.rmdir('css', function (err) { if (err) { console.log(err); return false; } console.log('删除目录成功'); })
9. fs.unlink 删除文件
fs.unlink('css/1.js', function (err) { if (err) { console.log(err); return false; } console.log('删除文件成功'); })
10. fs.createReadStream 从文件流中读取数据
//流的方式读取文件 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 写入文件
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)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。
以下实例我们通过读取一个文件内容并将内容写入到另外一个文件中。
// 创建一个可读流 var readerStream = fs.createReadStream('input.txt'); // 创建一个可写流 var writerStream = fs.createWriteStream('output.txt'); // 管道读写操作 // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中 readerStream.pipe(writerStream); console.log("程序执行完毕");
Demo
1、判断服务器上面有没有upload目录。没有创建这个目录
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()); } })