一、node模块中的CommonJS应用
- 通过require( )定义文件接收对象或变量(导入) 如:
let a=require('a.js')
- 将导出的变量或函数挂到exports对象的属性上,如果使用exports时,只能单个设置属性 如:
let a=123, export.a=a
- 使用module.exports对象整体到处变量或函数 如:
module.exports={name:"zhangsan",age:18}
二、模块路径解析规则
1.如果是nodejs内置的模块名称,不需要路径解析,只需要require函数即可
2.如果不是nodejs内置,就要用require(’./a.js’)
三、fs文件系统
名称 | 用法 |
---|---|
同步写入系统 | fs.openSync( ) |
写入内容 | fs.writeFileSync( ) |
退出文件 | fs.closeSync( ) |
文件读写 | fs.readFile( ) |
异步读写操作
- 读取文件(内容)
a) 异步读取
fs.readFile('要读取的文件的路径', function (err, data) {
// 判断 如果有错 打印错误
if (err) {
console.log('读取错误!')
}
// 否则 打印读取到的数据
console.log(data);
})
b) 同步读取
// 直接读取 返回读取的结果 保存在data变量里面
var data = fs.readFileSync('被读取的文件的路径');
// 引入fs模块
var 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('看一下阻塞不?')
02)异步读取文件信息
// 引入fs模块
var fs = require('fs');
/*
// 异步读取文件信息
fs.stat('./', function (err, stats) {
// 如果有错 抛出错误
if (err) {
throw err;
}
// 否则 打印读取的文件信息
// console.log(stats);
console.log('文件的大小:', stats.size);
console.log('是否是文件:', stats.isFile());
console.log('是否是目录(文件夹):', stats.isDirectory());
})
*/
// 同步读取 直接返回读取结果 保存在data里面
var data = fs.statSync('./readme.txt');
console.log(data);
#03-fs写文件
// 引入fs模块
var fs = require('fs');
// 往writeme.txt文件 写入一些内容
fs.writeFile('./writeme.txt', '我是写入的内容', function (err) {
// 判断 如果有错 抛出错误 否则 打印写入成功
if (err) {
throw err;
}
console.log('写入文件成功!')
})
04-先读取再写入
// 先引入fs模块
var fs = require('fs');
// 先读取文件
fs.readFile('./readme.txt', function (err, data) {
// 判断 如果有错 抛出错误 否则 把读取的结果保存在一个变量里面
if (err) {
throw err;
}
// 定义一个变量 保存读取结果
var readRst = data;
// 把读取的结果 写入writeme.txt文件里面
fs.writeFile('./writeme.txt', readRst, function (err) {
// 如果有错 抛出错误
if (err) {
throw err;
}
console.log('写入成功!')
})
})
05-删除文件
// 引入fs模块
var fs = require('fs');
// 删除文件
fs.unlink('./writeme.txt', function (err) {
// 判断 如果有错 抛出错误 否则 打印删除成功
if (err) {
throw err;
}
console.log('删除成功!')
})
06-读取文件目录中的所有文件
// 引入fs模块
var fs = require('fs');
// 读取文件目录(文件夹)中的所有文件
fs.readdir('../', function (err, files) {
// 如果有错 抛出错误
if (err) {
throw err;
}
// 否则 打印读取的结果 (读取当前目录的结果 会被放入一个数组里面)
console.log(files);
})
07-创建文件夹&删除空文件夹
// 引入fs模块
var fs = require('fs');
/*
// 创建文件夹
fs.mkdir('./cc', function (err) {
// 如果有错 抛出错误
if (err) {
throw err;
}
// 否则 打印创建文件夹成功
console.log('创建文件夹成功')
})
*/
// 删除空的文件夹
fs.rmdir('./cc', function (err) {
if (err) {
throw err;
} else {
console.log('删除空文件夹成功')
}
})
08-递归删除非空文件夹
// 引入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('D:\\day02');
// 暴露出去
// module.exports = delDir;
四、文件流写入
1.创建写入流
let ws=fs.createWriteStream('xxx.txt')
2.写入流的文件监听事件
ws.once('open',()=>{
ws.write('你好')
}
once监听通道只有一次
五、读取流
fs.createReadStream( )
let rs=fs.createReadStream('xxx.png')
re.on('close',()=>{
}}
六、综合可以用管道解决写入读取流
rs.pipe(ws)
读—>写自动完成
创建管道,将读取流通过管道流出