第三方包
创建多级文件夹 mkdirp npm包可以创建多级文件夹
node自带
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. 管道流
let fs = require('fs');
// 检测是文件还是目录
// 名字 回调函数
// fs.stat('./package.json', (err, data) => {
// if (err) { console.log(err);return;}
// console.log(`是文件:${data.isFile()}`);
// console.log(`是目录:${data.isDirectory()}`);
// })
// 创建目录
// 路径 权限(可以默认777 不填写) 回调函数
// fs.mkdir('./package', (err) => {
// if (err) {console.log(err);return;}
// console.log(`创建成功`);
// })
// 读取目录
// 路径 回调函数
// fs.readdir('./css', (err, data) => {
// if (err) {console.log(err);return;}
// console.log(data);
// })
// 写入文件 如果文件存在 会执行替换
// 路径 内容 回调函数
// fs.writeFile('./css/index3.css', '', (err) => {
// if (err) {console.log(err);return;}
// console.log(`写入成功`);
// })
// 读取文件
// 路径 回调函数
// fs.readFile('./css/index2.css', (err, data) => {
// if (err) {console.log(err);return;}
// console.log(data.toString());
// })
// 文件追加内容 如果文件存在会执行替换 如果不存在会创建文件
// 路径 内容 回调函数
// fs.appendFile('./css/index2.css', 'body{color:red;} h1{font-weight:600;}', (err) => {
// if (err) {console.log(err);return;}
// console.log(`追加成功`);
// })
// 重命名文件 或者 文件夹
// 路径 回调函数
// fs.rename('./css/index3.css', './css/index.css',(err) => {
// if (err) {console.log(err);return;}
// console.log(`重命名成功`);
// })
// 移动文件 或者 文件夹 可以一起重命名
// 路径 回调函数
// fs.rename('./css/index.css', './servers/index.css',(err) => {
// if (err) {console.log(err);return;}
// console.log(`移动成功`);
// })
// 删除文件
// 路径 回调函数
// fs.unlink('./css/index.css', (err) => {
// if (err) {console.log(err);return;}
// console.log(`删除文件成功`);
// })
// 删除文件夹 要先清空文件夹下的文件
// 路径 回调函数
// fs.rmdir('./css', (err) => {
// if (err) {console.log(err);return;}
// console.log(`删除文件夹成功`);
// })
// 删除文件夹 for循环删除文件 在删除文件夹
// 路径 回调函数
// fs.readdir('./css', (err, data) => {
// if (err) {console.log(err);return;}
// for (let i = 0; i < data.length; i++) {
// fs.unlink(`./css/${data[i]}`, (err) => {
// if (err) {console.log(err);return;}
// console.log(`删除文件成功`);
// })
// }
// fs.rmdir('./css', (err) => {
// if (err) {console.log(err);return;}
// console.log(`删除文件夹成功`);
// })
// console.log(data);
// })
// fs.createReadStream 从文件流中读取数据
// let fileReadStream = fs.createReadStream('data.json')
// let count=0;
// let str='';
// fileReadStream.on('data', (chunk) => {
// console.log(`${++count} 接收到:${chunk.length}`);
// str += chunk
// });
// fileReadStream.on('end', () => {
// console.log('--- 结束 ---');
// console.log(count);
// console.log(str);
// });
// fileReadStream.on('error', (error) => {
// console.log(error)
// });
// fs.createWriteStream 写入文件
// let data = '我是从数据库获取的数据,我要保存起来'; // 创建一个可以写入的流,写入到文件 output.txt 中
// let writerStream = fs.createWriteStream('output.txt'); // 使用 utf8 编码写入数据
// writerStream.write(data,'UTF8'); // 标记文件末尾
// writerStream.end(); // 处理流事件 --> finish 事件
// writerStream.on('finish', () => { /*finish - 所有数据已被写入到底层系统时触发。*/
// console.log('写入完成');
// })
// writerStream.on('error', function(err) {
// console.log(err.stack);
// });
// console.log('程序执行完毕');
// 管道流
// 创建一个可读流
// 管道提供了一个输出流到输入流的机制。通常我们用于从一个流中获取数据并将数据传 递到另外一个流中。
// 如上面的图片所示,我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个 桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。
// 我们通过读取一个文件内容并将内容写入到另外一个文件中。
// let readerStream = fs.createReadStream('input.txt'); // 创建一个可写流
// let writerStream = fs.createWriteStream('output.txt'); // 管道读写操作
// // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
// readerStream.pipe(writerStream);
// console.log("程序执行完毕");