node.js中fs文件系统目录操作与文件信息操作


Posted in Javascript onFebruary 24, 2018

目录操作

  • 如果存在该目录,就创建失败
  • 同步创建目录fs.mkdirSync(path, [mode])
const fs = require('fs');
let mkdir = './mkdir';
fs.mkdir(mkdir, (err) => {
  if (err) {
    console.log(`mkdir ${mkdir} file failed~`);
  } else {
    console.log(`mkdir ${mkdir} file success~`);
  }
});

读取目录

  • 如果读取的目录下有子目录或子文件,将会把子目录或子文件的文件名作为files的数组元素
  • 同步读取目录fs.readdirSync()
const fs = require('fs');
let mkdir = './mkdir';
fs.mkdir(mkdir, (err) => {
  if (err) {
    console.log(`mkdir ${mkdir} file failed~`);
    return false;
  }
  console.log(`mkdir ${mkdir} file success~`);
  let fileName = ['ONE', 'TWO', 'THREE'];
  fileName.forEach((elem) => {
    fs.mkdir(`${mkdir}/${elem}`, (err) => {
      if (err) {
        console.log(`${mkdir}/${elem} failed~`);
        return false;
      }
    });
    fs.readdir(mkdir, (err, files) => {
      if (err) {
        console.log(`readdir ${mkdir} file failed~`);
        return false;
      }
      console.log(`readdir ${mkdir} file success~`);
      console.log(`${files}`);
    });
  });
});

查看与修改文件或目录信息

  • 在fs模块中,可以使用stat方法或者lstat方法查看一个文件或一个目录。唯一区别在于当查看符号链接文件的信息时,必须使用lstat方法。
  • fs.stat(path, callback(err, stats))
  • fs.lstat(path, callback(err, stats))

查看文件信息

同步方法查看文件信息fs.statSync(path);

const fs = require('fs');
let mkdir = './mkdir';

fs.stat(mkdir, (err, stats) => {
  if (err) {
    console.log(`fs.stats ${mkdir} file failed~`);
  } else {
    console.log(`fs.stats ${mkdir} file success~`);
    console.log(stats);
  }
});

stats详解

Stats {
 dev: 2050,文件或目录所在的设备ID,仅在UNIX有效
 mode: 16877,使用数值形式代表的文件或目录的权限标志
 nlink: 3,文件或目录的硬连接数量
 uid: 0,文件或目录的所有者的用户ID,仅在UNIX有效
 gid: 0,文件或目录的所有者的用户组ID,仅在UNIX有效
 rdev: 0,为字符设备文件或块设备文件所在设备ID,仅在UNIX有效
 blksize: 4096,
 ino: 4197533,文件或目录的索引编号,仅在UNIX有效
 size: 4096,文件尺寸,即文件中的字节数
 blocks: 8,
 atimeMs: 1511846425357.986,
 mtimeMs: 1511846425256.986,
 ctimeMs: 1511846425256.986,
 birthtimeMs: 1511846425256.986,
 atime: 2017-11-28T05:20:25.358Z,文件的访问时间
 mtime: 2017-11-28T05:20:25.257Z,文件的修改时间
 ctime: 2017-11-28T05:20:25.257Z,文件的创建时间
 birthtime: 2017-11-28T05:20:25.257Z 
}

fstat方法查询文件信息

使用open方法或openSync方法打开文件并返回文件描述符时,可以使用fs模块中的fstat方法查询被打开的文件信息

const fs = require('fs');
let mkdir = './mkdir';

fs.open(mkdir, 'r', (err, fd) => {
  if (err) {
    console.log(`open ${mkdir} file failed~`);
    return false;
  }
  fs.fstat(fd, (err, stats) => {
    if (err) {
      console.log(`fstat ${mkdir} file failed~`);
      return false;
    }
    console.log(JSON.stringify(stats));
  })
})

fs.fstat结果

{
  "dev": 1041887651,
  "mode": 16822,
  "nlink": 1,
  "uid": 0,
  "gid": 0,
  "rdev": 0,
  "ino": 4222124650663107,
  "size": 0,
  "atimeMs": 1519394418412.3062,
  "mtimeMs": 1519394418412.3062,
  "ctimeMs": 1519394418412.3062,
  "birthtimeMs": 1519394418402.2554,
  "atime": "2018-02-23T14:00:18.412Z",
  "mtime": "2018-02-23T14:00:18.412Z",
  "ctime": "2018-02-23T14:00:18.412Z",
  "birthtime": "2018-02-23T14:00:18.402Z"
}

检查文件或目录是否存在

参数为boolean类型的值

const fs = require('fs');
let mkdir = './mkdir';
fs.exists(mkdir, (exits) => {
  if (exits) {
    console.log(`${exits}, ${mkdir} file exists`);
  } else {
    console.log(`${exits}, ${mkdir} file not exists`)
  }
});

修改文件访问时间及修改时间

  • fs.utimes(path, atime, mtime, callback(err))
  • 同步修改文件访问时间及修改时间fs.utimesSync(path, atime, mtime)
// 修改文件访问时间及修改时间都为当前时间
const fs = require('fs');
let mkdir = './mkdir';
fs.utimes(mkdir, new Date(), new Date(), (err) => {
  if (err) {
    console.log(`fs.utimes ${mkdir} file failed~`);
  } else {
    console.log(`fs.utimes ${mkdir} file success~`);
  }
})

修改文件或目录的权限

  • 同步修改文件或目录的权限fs.chmodSync(path, mode);
  • fs.chmod(path, mode, callback(err))
  • mode代表的是权限的大小
  • fs.chmod方法触发前的权限是drwxr-xr-x.
  • fs.chmod方法触发后的权限是drw-------.
const fs = require('fs');
let mkdir = './mkdir';
fs.chmod(mkdirOne, '0600', (err) => {
  if (err) {
    console.log(`fs.chmod ${mkdir} file failed`);
    return false;
  }
  console.log(`fs.chmod ${mkdir} file success~`);
});

在使用open方法或openSync方法打开文件并返回文件描述符之后,可以使用fs模块中的fchmod方法修改文件的读写权限

const fs = require('fs');
let mkdir = './mkdir';
fs.open(mkdir, 'r', (err, fd) => {
  if (err) {
    console.log(`open file ${mkdir} failed~`);
    return false;
  }
  fs.fchmod(fd, '0600', (err) => {
    if (err) {
      console.log(`fs.fchmod ${mkdir} file failed~`);
      return false;
    }
    console.log(`fs.fchmod ${mkdir} file success~`);
  })
});
Javascript 相关文章推荐
div移动 输入框不能输入的问题
Nov 19 Javascript
javascript:history.go()和History.back()的区别及应用
Nov 25 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
Oct 07 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
Jquery把获取到的input值转换成json
May 15 jQuery
JavaScript 异步调用
Oct 25 Javascript
页面点击小红心js实现代码
May 26 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
Vue中axios拦截器如何单独配置token
Dec 27 Javascript
js实现二级联动简单实例
Jan 11 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
Feb 24 #jQuery
使用puppeteer破解极验的滑动验证码
Feb 24 #Javascript
Vue的elementUI实现自定义主题方法
Feb 23 #Javascript
elementui的默认样式修改方法
Feb 23 #Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 #Javascript
angular基于ng-alain定义自己的select组件示例
Feb 23 #Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 #Javascript
You might like
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
一个ftp类(ini.php)
2006/10/09 PHP
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php购物车实现方法
2015/01/03 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php简单判断文本编码的方法
2015/07/30 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[02:33]DOTA2亚洲邀请赛趣味视频之吐真话筒
2018/03/31 DOTA
python函数返回多个值的示例方法
2013/12/04 Python
Python线程详解
2015/06/24 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
类和结构的区别
2012/08/15 面试题
医大实习自我鉴定
2013/12/07 职场文书
分家协议书
2014/04/21 职场文书
欢迎领导标语
2014/06/27 职场文书
挂职学习心得体会
2014/09/09 职场文书
群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
销售辞职信范文
2015/03/02 职场文书
考试后的感想
2015/08/07 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL