Node.js学习笔记(操作文件系统)

1.模块的导入与导出
CommonJs的规范:

  • 模块引用:模块通过require方法来同步加载所依赖的模块
  • 模块定义:在node中一个文件就是一个模块,提供export对象导出当前模块的方法或者变量
  • 模块标识:模块标识传递给require()方法的参数,可以是按驼峰命名的方式,也可以是文件路径

模块的导出:
方法一:使用module.exports对象整体导出一个变量对象或者函数
方法二:可将需要导出的变量或者函数挂载到exports对象的属性上

function fn() {
    console.log('fn');
}

let student = {
    username: 'Aiolimp'
}

console.log('student:', student.username);

//模块的导出 
//方法一:使用module.exports对象整体导出一个变量对象或者函数
// module.exports = { student, fn }
//方法二:可将需要导出的变量或者函数挂载到exports对象的属性上
exports.fn = fn 

模块的导入:

let file1 = require('./index1')
//模块路径:
//1.如果有当前相对路径,则直接从相对路径的文件中引用
//2.如果没有相对路径则从当前目录的node_modules中引用,如果还是没有就往上一层级的node_modules查找一直到F盘的根目录为止

console.log('file:', file1);

file1.fn();

2.node文件的写入

  • 同步写入:
//同步写入文件
//1.导入fs
let fs = require('fs')

//2.同步打开文件
//参数一:打开的文件格式 参数二:以写入的方式
let fd = fs.openSync('demo.html', 'w');

//3.写入内容
//参数一:写入的文件  参数二:写入的内容
let str = 'hello word';
fs.writeFileSync(fd, str);

//4.退出文件
fs.closeSync(fd)
  • 文件异步写入
//异步写入文件
let fs = require('fs')

fs.open('demo2.html', 'w', (err, fd) => {
    console.log('创建了文件');
    fs.writeFile(fd, '<h1>你好</h2>', (err) => {
        if (!err) {
            console.log('写入了文件');
            fs.close(fd, () => {
                console.log('关闭了文件');
            });
        } else {
            console.log(err);
        }
    })
})

console.log('我最先输出');//异步操作 不会等待
  • 文件流写入
//node文件流写入
//1.导入fs
let fs = require('fs')

//2.创建写入流
let ws = fs.createWriteStream('text1.txt')

//3.监听通道打开
ws.once('open', () => {
    console.log('通道打开了');
    ws.write('我真帅!')
    ws.write('我真厉害!')
    //写入结束
    ws.end()
})

//4.监听通道关闭
ws.once('close', () => {
    console.log('通道关闭了');
})
  • 异步文件读取
//node异步文件读取

let fs = require('fs')

fs.readFile('demo.html', (err, data) => {
    if (!err) {
        console.log(data.toString())//直接读取的是二进制文件 需要toString转换为字符串
    } else {
        console.log(err);
    }
})

console.log('读取数据');
  • 异步文件读取并重新写入文件
//node异步读取并重新写入文件

let fs = require('fs')
//1.读取文件
fs.readFile('1.jpg', (err, data) => {
    if (!err) {
        //2.重新写入文件
        fs.writeFile('2.jpg', data, (err) => {
            if (!err) {
                console.log('文件图片写入成功');
            } else {
                console.log(err);
            }
        })
    } else {
        console.log(err);
    }
})

console.log('读取数据');
  • 通过管道读取并写入流(pipe)
//通过管道读取并写入流 

let fs = require('fs')

let rs = fs.createReadStream('demo1.html')
let ws = fs.createWriteStream('demo2.html')

//创建管道,将读取流通过管道流出
rs.pipe(ws)
  • 删除指定文件(unlink)
//删除指定文件  unlink
let fs = require('fs')

fs.unlink('demo2.html', (err) => {
    if (!err) {
        console.log('文件删除成功');
    } else {
        console.log(err);
    }
})
  • 读取当前目录下所有文件(readdir)
//读取当前目录下所有文件  readdir

let fs = require('fs')

fs.readdir('./', (err, data) => {
    if (!err) {
        console.log(data);
    } else {
        console.log(err);
    }
})
  • 创建目录(mkdir)
//创建目录  mkdir

let fs = require('fs')

fs.mkdir('./img', () => {
    console.log('创建目录成功');
})

  • 删除目录(rmdir)
//删除目录   rmdir

let fs = require('fs')

fs.rmdir('./img', (err) => {
    if (!err) {
        console.log('删除目录成功');
    } else {
        console.log(err);//当目录不为空时,调用此方法不能删除目录
    }
})
  • 递归删除空目录
let fs = require('fs')

function delDir(dirpath) {
    var fileArr = fs.readdirSync(dirpath);
    for (var i in fileArr) {
        var filePath = dirpath + '/' + fileArr[i]

        //读取文件信息
        var stat = fs.statSync(filePath)
        //判断是文件还是目录
        if (stat.isFile()) {
            fs.unlinkSync(filePath)
        } else if (stat.isDirectory()) {
            delDir(filePath)//递归
        }
    }

    //删除空目录
    fs.rmdirSync(dirpath)
}

delDir('./img')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值