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 相关文章推荐
JavaScript 调试器简介
Feb 21 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
May 04 Javascript
javascript中简单的进制转换代码实例
Oct 26 Javascript
jQuery插件jPaginate实现无刷新分页
May 04 Javascript
详解javascript实现自定义事件
Jan 19 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
Nov 24 Javascript
javascript设计模式之中介者模式学习笔记
Feb 15 Javascript
浅谈Koa服务限流方法实践
Oct 23 Javascript
vue2.0使用swiper组件实现轮播效果
Nov 27 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
Jan 04 Javascript
JavaScript实现拖拽效果
Mar 16 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
Oct 29 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
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
jquery异步循环获取功能实现代码
2010/09/19 Javascript
jQuery AjaxQueue改进步骤
2011/10/06 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
移动适配的几种方案(三种方案)
2016/11/25 Javascript
js移动焦点到最后位置的简单方法
2016/11/25 Javascript
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
vuex实现购物车功能
2020/06/28 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
vue实现按钮切换图片
2021/01/20 Vue.js
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
利用python实现周期财务统计可视化
2019/08/25 Python
利用python实现平稳时间序列的建模方式
2020/06/03 Python
Python控制台实现交互式环境执行
2020/06/09 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
关于幼儿的自我评价
2013/12/18 职场文书
简历的自荐信
2013/12/19 职场文书
快递员岗位职责
2014/09/12 职场文书
长江三峡导游词
2015/01/31 职场文书
幼儿园2016圣诞节活动总结
2016/03/31 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
浅谈Python数学建模之数据导入
2021/06/23 Python
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL