fs模块(系统内置模块 主要用来操作文件)
注意: 基本上所有方法都有异步和同步,基本上同步的方法 都是在异步方法后面加上 Sync
常见的文件的基本操作:
0 1 2 |
前提: 要先引入fs模块 var fs = require('fs'); |
01) 读取文件(内容)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
a) 异步读取 fs.readFile('要读取的文件的路径', function (err, data) { // 判断 如果有错 打印错误 if (err) { console.log('读取错误!') } // 否则 打印读取到的数据 console.log(data); }) b) 同步读取 // 直接读取 返回读取的结果 保存在data变量里面 var data = fs.readFileSync('被读取的文件的路径'); |
// 引入fs模块
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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)异步读取文件信息
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 引入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写文件
0 1 2 3 4 5 6 7 8 9 10 11 |
// 引入fs模块 var fs = require('fs'); // 往writeme.txt文件 写入一些内容 fs.writeFile('./writeme.txt', '我是写入的内容', function (err) { // 判断 如果有错 抛出错误 否则 打印写入成功 if (err) { throw err; } console.log('写入文件成功!') }) |
04-先读取再写入
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 先引入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-删除文件
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 引入fs模块 var fs = require('fs'); // 删除文件 fs.unlink('./writeme.txt', function (err) { // 判断 如果有错 抛出错误 否则 打印删除成功 if (err) { throw err; } console.log('删除成功!') }) |
06-读取文件目录中的所有文件
0 1 2 3 4 5 6 7 8 9 10 11 12 |
// 引入fs模块 var fs = require('fs'); // 读取文件目录(文件夹)中的所有文件 fs.readdir('../', function (err, files) { // 如果有错 抛出错误 if (err) { throw err; } // 否则 打印读取的结果 (读取当前目录的结果 会被放入一个数组里面) console.log(files); }) |
07-创建文件夹&删除空文件夹
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// 引入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-递归删除非空文件夹
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
// 引入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; |