06-文件系统模块

文件系统(File System)

fs模块(系统内置模块 主要用来操作文件)

1. 写入

  • 提供同步异步两种选择(同步的方法 都是在异步方法后面加上 Sync)
  • 同步导致阻塞
  • 异步操作完成通过回调返回结果

1.1 同步写入操作

let fs = require("fs");

//同步打开文件
let fd = fs.openSync('text_1', 'w');
console.log(fd)

//写入内容
fs.writeFileSync(fd, 'hello ink!');

//退出
fs.closeSync(fd);

1.2 异步写入操作

let fs = require("fs");

fs.open("text_2.txt", "w", (err, fd) => {
    if( !err ) {
        fs.writeFile(fd, 'ink nice to meet u!!', (err) => {
            if( !err ) {
                console.log('success');
                fs.close(fd, (err) => {
                    if ( !err ) {
                        console.log('file closed');
                    } else {
                        throw err;
                    }
                })
            } else {
                throw err;
            }
        });
    } else {
        throw err;
    }
})

1.3 文件流写入操作

let fs = require("fs");

let ws = fs.createWriteStream('text_3.txt');

//打开通道
ws.once('open', () => {
    console.log('通道已打开!')
})

ws.write("what's your name?\n");
ws.write("what's your name?\n");
ws.write("what's your name?\n");
ws.write("what's your name?\n");

ws.end();

//监听通道关闭
ws.once('close', () => {
    console.log('通道已关闭!')
})

2. 文件读取操作

2.1文件读取

 let fs = require('fs');

  // 异步读取
  /*
      fs.readFile('./readme.txt', function (err, data) {
            // 判断 如果有错 抛出错误
          if (err) {
              throw err;
          } 
          // 如果没有错 打印读取到的文件数据
          console.log('读取结果:', data.toString());
      })
  */ 

  // console.log('看一下阻塞不?')

  // 同步读取 (直接返回读取的结果 保存在变量data里面)
  var data = fs.readFileSync('./readme.txt');
  console.log('读取结果:', data.toString());
  console.log('看一下阻塞不?')

2.2 读取图片并写入到另一个文件中(单个文件操作)

let fs = require("fs");

fs.readFile("../images/deskPic1.jpg", (err, data) => {
    if ( !err ) {
        console.log(data);
        //写入图片文件
        fs.writeFile('receiveimage_1.jpg', data, (err, data) => {
            if ( !err ) {
                console.log('transfer success!');
            } else {
                throw err;
            }
        })
    } else {
        throw err;
    }
})

2.3 使用文件读入流处理

let fs = require("fs");

let readStream = fs.createReadStream("../images/deskPic2.jpg"); 

let writeStream = fs.createWriteStream("receiveimage_2.jpg");

//监听文件流打开关闭
readStream.once('open', () => {
    console.log('readstream opened');
})

readStream.once('clos', () => {
    console.log('readstream closed');
})

writeStream.once('open', () => {
    console.log('writeStream opened');
})

writeStream.once('clos', () => {
    console.log('writeStream closed');
})

//读入流操作
readStream.on('data', (data) => {
    console.log(data);
    //文件过大时分段读取
    //写入
    writeStream.write(data);
})

简便方法

let fs = require("fs");

let readStream = fs.createReadStream("../images/deskPic2.jpg"); 

let writeStream = fs.createWriteStream("receiveimage_2.jpg");

//创建管道

readStream.pipe(writeStream);

3.删除文件

// 引入fs模块
let fs = require('fs');

// 删除文件
fs.unlink('./writeme.txt', function (err) {
    // 判断 如果有错 抛出错误 否则 打印删除成功
    if (err) {
        throw err;
    } 

    console.log('删除成功!')

})

4.读取文件目录

// 引入fs模块
let fs = require('fs');

// 读取文件目录(文件夹)中的所有文件
fs.readdir('../', function (err, files) {
    // 如果有错 抛出错误
    if (err) {
        throw err;
    }
    // 否则 打印读取的结果 (读取当前目录的结果 会被放入一个数组里面)
    console.log(files);
})

5. 创建文件夹&删除空文件夹

// 引入fs模块
var fs = require('fs');
/*
    // 创建文件夹
    fs.mkdir('../img', function (err) {
        // 如果有错 抛出错误
        if (err) {
            throw err;
        }
        // 否则 打印创建文件夹成功
        console.log('创建文件夹成功')
    })
*/ 
// 删除空的文件夹
fs.rmdir('../img', function (err) {
    if (err) {
        throw err;
    } else {
        console.log('删除空文件夹成功')
    }
})

6. 递归删除非空文件夹

 // 引入fs模块
var fs = require('fs');


// 封装成一个 可以删除非空目录的函数(传入要删除的目录即可)
function delDir (dir) {
    // 获取传入的目录下所有的文件 结果是一个数组
    var filesArr = fs.readdirSync(dir);
    // 循环遍历这个数组 ['bb', 'cc', 'text.txt']
    for (var i in filesArr) {
        // 拼接读取文件信息的路径
        var path = dir + '/' +filesArr[i] // ./aa/bb  ./aa/cc ./aa/text.txt

        // 读取文件的信息 
        var stat = fs.statSync(path);
        // 判断 如果是文件 直接删除
        if (stat.isFile()) {
            fs.unlinkSync(path)  // 直接删除
        } else if (stat.isDirectory()) {
            // 递归调用自己
            delDir(path)  
        }
    }
    // 删除空目录(文件夹)
    fs.rmdirSync(dir)
}

delDir('../img');

// 导出
// module.exports = delDir;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值