node fs文件操作

339 阅读3分钟

文件写入

//文件写入
//1. 引入 fs 模块
const fs = require('fs');
//2-1 异步API. 调用 fs 中的方法 write 写入  File 文件
fs.writeFile('./index.html', '若以色见我,以音声求我,是人行邪道,不能见如来\r\n', { flag: 'a' }, function (err) {
    //判断 null
    if (err) {
        console.log('写入失败');
        console.log('失败的错误为' + err);
        return;
    }
    console.log('写入成功');
    // console.log(111);
});
// console.log(222);

//2-2 同步API
// fs.writeFileSync('./app.css', '*{margin:0;padding:0}');
// fs.writeFileSync('./app.js', Date.now());
// console.log(Date.now());


//同步与异步的演示
// const arr = [1,2,3,4,5,6,9];

// arr.forEach(item => {
//     // console.log(item * 10000);
//     console.log(11);
// });

// setTimeout(() => {
//     console.log(111);
// })

文件流的写入

//1. 引入 fs 模块
const fs = require('fs');

//2. 创建写入流对象
// const ws = fs.createWriteStream('./home.html');
const ws = fs.createWriteStream('./home.js');

//3. 执行写入
// ws.write('<html>');
// ws.write(`
//     <head>
//         <title>这是一个脚本创建的文件哦</title>
//     </head>
//     <body>
//         <h1>哎呦 不错哦~</h1>
//     </body>
// `)
// ws.write('</html>');

ws.write(`
    const body = document.body;
    body.style.background = 'pink';
    setTimeout(() => {
        alert('恭喜中奖啦!!!');
    }, 1000);
`)

//4. 关闭写入流
ws.close();

writeFile 与 createWriteStream 使用场景

对于简单的写入次数较少的情况, 可以使用 writeFile , 如果是批量要写入的场景,使用 createWriteStream

文件读取

//1. 引入 fs 模块
const fs = require('fs');

//2-1. 调用方法读取内容
// fs.readFile('./home.html', (err, data) => {
//     if(err){
//         console.log('读取失败');
//         console.log("错误的对象为");
//         console.log(err);
//         return;
//     }
//     //输出从文件中读取的内容
//     console.log(data.toString());
// });

//2-2 同步读取
let result = fs.readFileSync('./index.html');
console.log(result.toString());

流式文件读取

//1. 引入 fs 模块
const fs = require('fs');

//2. 创建读取流对象
const rs = fs.createReadStream('./file/刻意练习.mp3');

//3. 绑定事件 when 当....时候   chunk 块   当读取完一块数据后 触发
rs.on('data', (chunk) => {
    console.log(chunk.length);
}); 

// 读取流打开的时候触发
rs.on('open', () => {
    console.log('读取流打开了');
});

流式读取文件并写入 (复制文件)

//复制文件
//1. 模块引入
const fs = require('fs');

//2. 创建流对象
const ws = fs.createWriteStream('./file/不二法门.mp3');
const rs = fs.createReadStream('./file/刻意练习.mp3');

//3. 绑定事件读取内容 方式一
// rs.on('data', chunk => {
//     //写入文件
//     ws.write(chunk);
// });

//pipe管道  方式二
rs.pipe(ws);

重命名

// 1. 引入模块
const fs = require('fs');

//2. 调用方法
// fs.rename('./home.js', './index.js', err => {
//     if(err) throw err;
//     console.log('重命名成功');
// });

// fs.rename('./index.html', './project/首页.html', err => {
//     if(err) throw err;
//     console.log('重命名成功');
// });

//同步API
fs.renameSync('./project/app.css', './project/index.css');

删除文件

//1. 引入 fs 模块
const fs = require('fs');

//2. 调用方法 异步
// fs.unlink('./project/index.js', err => {
//     if(err) throw err;
//     console.log('删除成功');//..
// });
//同步
 fs.unlinkSync('./project/app.js');

文件夹操作

//文件夹操作
const fs = require('fs');

//创建文件夹
// fs.mkdir('./html', err => {
//     if(err) throw err;
//     console.log('创建成功');
// });

//读取文件夹 read 读取  dir 文件夹
// fs.readdir('./project', (err, files) => {
//     if(err) throw err;
//     //输出文件夹下的『文件列表』
//     console.log(files);
// });

fs.readdir('d:/', (err, files) => {
    if(err) throw err;
    //输出文件夹下的『文件列表』
    console.log(files);
});

//删除文件夹
// fs.rmdir('./project', {recursive: true},err => {
//     console.log(err);
// });

路径问题

// fs 模块的路径问题
/**
 * 路径的分类
 * 绝对路径
 *   * D:/www/share/day05/代码/1-nodejs/write.js (windows)
 *   * C:/images/logo.png  (windows)
 *   * /usr/root/www/website/index.html (linux)
 * 相对路径
 *   * ./index.html
 *   * ../css/app.css  上一级目录中找 css/app.css
 *   * index.html  当前文件夹下的 index.html
 */ 

const fs = require('fs');
// fs.writeFileSync('D:\\www\\share\\day05\\课堂\\1-NodeJS\\代码\\3-文件系统\\index.html','abc');

//特殊的变量  『始终保存的是当前文件所在文件夹的绝对路径』
// console.log(__dirname);
fs.writeFileSync(__dirname + '/index.html','abc');

资源的状态

// stat 查看『资源的状态』
const fs = require('fs');

//查看文件状态
fs.stat('./file', (err, stats) => {
    if(err) throw err;
    //如果没有错
    console.log('是否为文件夹' + stats.isDirectory());
    console.log('是否为文件' + stats.isFile());
});