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 相关文章推荐
javascript 网页跳转的方法
Dec 24 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 Javascript
关于JS数组追加数组采用push.apply的问题
Jun 09 Javascript
轻量级网页遮罩层jQuery插件用法实例
Jul 31 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
Aug 25 Javascript
Vue 2.x教程之基础API
Mar 06 Javascript
Angular2使用Augury来调试Angular2程序
May 21 Javascript
解决JS外部文件中文注释出现乱码问题
Jul 09 Javascript
JS实现websocket长轮询实时消息提示的效果
Oct 10 Javascript
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
如何为vuex实现带参数的 getter和state.commit
Jan 04 Javascript
详解Vue之计算属性
Jun 20 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
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
PHP项目多语言配置平台实现过程解析
2020/05/18 PHP
模拟select的代码
2011/10/19 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
jQuery自定义图片缩放拖拽插件imageQ实现方法(附demo源码下载)
2016/05/27 Javascript
Javascript 实现放大镜效果实例详解
2016/12/03 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
js尾调用优化的实现
2019/05/23 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
C++的几个面试题附答案
2016/08/03 面试题
《夕阳真美》教学反思
2014/04/27 职场文书
奠基仪式策划方案
2014/05/15 职场文书
县政府办公室领导班子个人对照检查材料
2014/09/16 职场文书
向女朋友道歉的话
2015/01/20 职场文书
中学团支部工作总结
2015/08/13 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
《青山不老》教学反思
2016/02/22 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
HTML CSS 一个标签实现带动画的抖音LOGO
2022/04/26 HTML / CSS