回调中提供的 filename 参数仅在 Linux 和 Windows 系统上支持。 即使在支持的平台中,filename 也不能保证提供。 因此,不要以为 filename 参数总是在回调中提供,如果它是空的,需要有一定的后备逻辑
fs.watch('somedir', (eventType, filename) => { console.log(`事件类型是: ${eventType}`); if (filename) { console.log(`提供的文件名: ${filename}`); } else { console.log('未提供文件名'); } });
var fs = require('fs'); var filename = '1.txt'; fs.watch(filename,function(eventType, _filename){ console.log(eventType);//change if(_filename){ console.log(_filename + '发生了改变');//'1.txt发生了改变' }else{ console.log('...'); } })
[注意]当一个文件出现或消失在一个目录里时,'rename'也会被触发
fs目录操作 1、创建 fs.mkdir(path[, mode], callback)参数如下:
path - 文件路径。
mode - 设置目录权限,默认为 0777。
callback - 回调函数,回调只有一个可能的异常参数
var fs = require('fs'); fs.mkdir('./1',function(err){ console.log(err);//null })
fs.mkdirSync(path[, mode])fs.mkdir(path[, mode], callback)的同步版本,返回undefined
var fs = require('fs'); fs.mkdirSync('./2');
2、删除 fs.rmdir(path, callback)参数如下:
path - 文件路径。
callback - 回调函数,回调只有一个可能的异常参数
var fs = require('fs'); fs.rmdir('./1',function(err){ console.log(err);//null })
fs.rmdirSync(path, callback)fs.rmdir(path, callback)的同步版本,返回undefined
var fs = require('fs'); fs.rmdirSync('./2');
3、读取 fs.readdir(path[, options], callback)参数如下:
path <String> | <Buffer>
options <String> | <Object> 可选的 options 参数用于传入回调的文件名,它可以是一个字符串并指定一个字符编码,或是一个对象且由一个 encoding 属性指定使用的字符编码。 如果 encoding 设为 'buffer',则返回的文件名会被作为 Buffer 对象传入
encoding <String> 默认 = 'utf8'
callback <Function> 回调有两个参数 (err, files),其中 files 是目录中不包括 '.' 和 '..' 的文件名的数组
var fs = require('fs'); fs.readdir('./',function(err,data){ console.log(err);//null /* [ '.csslintrc', '.jshintrc', 'a.txt', 'dist', 'Gruntfile.js', 'Gruntfile1.js', 'index.html', 'main.js', 'node_modules', 'package.json', 'src' ] */ console.log(data); })
var fs = require('fs'); fs.readdir('./',function(err,data){ data.forEach(function(item,index,arr){ fs.stat(item,function(err,stats){ if(stats.isFile()){ console.log('文件:' + item); } if(stats.isDirectory()){ console.log('目录:' + item); } }); }) }) /* 文件:.jshintrc 文件:.csslintrc 目录:dist 文件:Gruntfile.js 文件:index.html 文件:Gruntfile1.js 文件:main.js 目录:node_modules 文件:package.json 文件:a.txt 目录:src */
fs.readdirSync(path[, options], callback)fs.readdir(path[, options], callback)的同步版本,返回一个不包括 '.' 和 '..' 的文件名的数组
var fs = require('fs'); var result = fs.readdirSync('./'); /* [ '.csslintrc', '.jshintrc', 'a.txt', 'dist', 'Gruntfile.js', 'Gruntfile1.js', 'index.html', 'main.js', 'node_modules', 'package.json', 'src' ] */ console.log(result);
遍历目录遍历目录是操作文件时的一个常见需求。比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录
遍历目录时一般使用递归算法,否则就难以编写出简洁的代码。递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题
function factorial(n) { if (n === 1) { return 1; } else { return n * factorial(n - 1); } }
上边的函数用于计算N的阶乘(N!)。可以看到,当N大于1时,问题简化为计算N乘以N-1的阶乘。当N等于1时,问题达到最小规模,不需要再简化,因此直接返回1