Node.js中常规的文件操作总结


Posted in Javascript onOctober 13, 2016

前言

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:

var fs = require("fs")

fs模块是文件操作的封装,它提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX文件系统操作。与其他模块不同的是,fs模块中所有的操作都提供了异步和同步的两个版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()

一. 目录操作

1. 创建目录

创建目录的语法如下:

fs.mkdir(path[, mode], callback) // 异步方法
fs.mkdirSync(path[, mode]) // 同步方法

示例:

var fs = require("fs");

// 在该文件的同一目录下建立test目录
fs.mkdir('test',function(err){
 if (err) {
  return console.error(err);
 }
 console.log("目录创建成功。");
});

2. 读取目录

读取目录的语法如下:

fs.readdir(path, callback)
fs.readdirSync(path)

     1、path: 文件路径;

     2、callback: 回调函数,回调函数带有两个参数err, files。err为错误信息,files为目录下的文件数组列表。

示例:

var fs = require("fs");

fs.readdir("test/",function(err, files){
 if (err) {
  return console.log(err);
 }
 files.forEach( function (file){
  console.log( file );
 });
});

3. 删除目录

删除目录的语法如下:

fs.rmdir(path, callback)
fs.rmdirSync(path)

示例:

var fs = require("fs");

fs.rmdir("test/ewe",function(err){
 if (err) {
  return console.log(err);
 }

 fs.readdir("/test/",function(err, files){
  if (err) {
   return console.error(err);
  }
  files.forEach( function (file){
   console.log( file );
  });
 });
});

二. 文件操作

1. 打开文件

打开文件的语法如下:

fs.open(path, flags, [mode], [callback(err, fd)])

其中,path为文件的路径,flags指文件的读取方式,mode参数用于创建文件时给文件指定权限,默认是0666.回掉函数将会传递一个文件描述符fd。

flags的常用参数值如下:

Node.js中常规的文件操作总结

mode参数表示的文件权限是POSIX操作系统中对文件读取和访问权限的规范,通常用一个八进制数来表示。例如0754表示文件所有者的权限是7(读、写、执行),同组的用户权限是5(读、执行),其他用户的权限是4(读)。

示例:

var fs = require('fs');

fs.open("test.txt","w",0644,function(e,fd){
 try{
  fs.write(fd,"first fs!",0,'utf8',function(e){
   fs.closeSync(fd);
  })
 } catch(E) {
  throw e;
 }

});

2. 写入文件

写入文件的语法如下:

fs.writeFile(file, data[, options], callback)
fs.writeFileSync(file, data[, options])

示例:

var fs = require("fs");

fs.writeFile('test.txt', 'hello world!', function(err) {
 if (err) {
  return console.log(err);
 }

 fs.readFile('test.txt', function (err, data) {
  if (err) {
   return console.log(err);
  }
  console.log("异步读取文件数据: " + data.toString());
 });
});

3. 读取文件

读取文件的语法如下:

fs.read(fd, buffer, offset, length, position, callback)
fs.readSync(fd, buffer, offset, length, position)

fs.readFile(file[, options], callback)
fs.readFileSync(file[, options])

其中,fs.read()fs.readSync()的参数如下:

     fd ? 通过 fs.open() 方法返回的文件描述符;

     buffer ? 数据写入的缓冲区;

     offset ? 缓冲区写入的写入偏移量;

     length ? 要从文件中读取的字节数;

     position ? 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取;

     callback ? 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象;

fs.read()的示例如下:

var fs = require('fs'); 
fs.open('test.txt', 'r', function(err, fd) { 
if (err) { 
console.error(err); 
return; 
} 
var buf = new Buffer(8); 
fs.read(fd, buf, 0, 8, null, function(err, bytesRead, buffer) { 
if (err) { 
console.error(err); 
return; 
} 
console.log('bytesRead: ' + bytesRead); 
console.log(buffer); 
}) 
});

fs.readFile()的示例如下:

var fs = require('fs'); 
fs.readFile('test.txt', function(err, data) { 
 if (err) { 
  console.log(err); 
 } else { 
  console.log(data.toString()); 
 } 
});

4. 关闭文件

关闭文件的语法如下:

fs.close(fd, callback)
fs.closeSync(fd)

5. 删除文件

删除文件的语法如下:

fs.unlink(path, callback)
fs.unlinkSync(path)

示例:

var fs = require("fs");

fs.unlink('test.txt', function(err) {
 if (err) {
  return console.log(err);
 }
 console.log("文件删除成功!");
});

6. 确定文件是否存在

确定文件是否存在的语法如下:

fs.exists(path, callback)
fs.existsSync(path)

示例:

var fs = require('fs');

fs.exists('test.txt', function (exists) {
 if(exists) {
  console.log("文件存在!");
 }else {
  console.log("文件不存在!");
 }
});

7. 追加内容至文件

fs.appendFile(file, data[, options], callback)
fs.appendFileSync(file, data[, options])

示例:

var fs = require('fs');

fs.appendFile("test.txt", "append content", function (err) {
 if (err) {
  console.log(err);
 }else {
  fs.readFile('test.txt', function(err, data) { 
   if (err) { 
    console.log(err); 
   } else { 
    console.log(data.toString()); 
   } 
  }); 
 }
});

总结

更多的文件系统操作可查看Node.js的fs模块的官方API文档,以上就是关于Node.js中文件常规操作的全部内容,希望这篇文章对大家学习或者使用Node.js能有所帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
那些年,我还在学习jquery 学习笔记
Mar 05 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
Apr 08 Javascript
js实现单一html页面两套css切换代码
Apr 11 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
JQuery基础语法小结
Feb 27 Javascript
微信小程序 wx.request(OBJECT)发起请求详解
Oct 13 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
Dec 11 Javascript
Three.JS实现三维场景
Dec 30 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
Apr 11 Javascript
Vue循环中多个input绑定指定v-model实例
Aug 31 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
Sep 07 Javascript
BootStrap实现手机端轮播图左右滑动事件
Oct 13 #Javascript
js图片切换具体实现代码
Oct 13 #Javascript
微信小程序 rpx 尺寸单位详细介绍
Oct 13 #Javascript
jquery实现图片切换代码
Oct 13 #Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 #Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
Oct 13 #Javascript
Javascript中this绑定的3种方法与比较
Oct 13 #Javascript
You might like
php中实现简单的ACL 完结篇
2011/09/07 PHP
介绍一些PHP判断变量的函数
2012/04/24 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
PHP缓冲区用法总结
2016/02/14 PHP
深入理解PHP中的empty和isset函数
2016/05/26 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
让浏览器非阻塞加载javascript的几种方法小结
2011/04/25 Javascript
Jquery阻止事件冒泡 event.stopPropagation
2011/12/11 Javascript
jquery命令汇总,方便使用jquery的朋友
2012/06/26 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
jQuery+ajax实现文章点赞功能的方法
2015/12/31 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
Python警察与小偷的实现之一客户端与服务端通信实例
2014/10/09 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
python实现广度优先搜索过程解析
2019/10/19 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
python如何操作mysql
2020/08/17 Python
意大利火车票和铁路通行证专家:ItaliaRail
2019/01/22 全球购物
党的群众路线教育实践活动对照检查材料
2014/09/22 职场文书
财务部岗位职责范本
2015/04/14 职场文书
爱心捐助活动总结
2015/05/09 职场文书
初中物理教学反思
2016/02/19 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python