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 相关文章推荐
使用js对select动态添加和删除OPTION示例代码
Aug 12 Javascript
jquery实现多行文字图片滚动效果示例代码
Oct 10 Javascript
jquery操作对象数组元素方法详解
Nov 26 Javascript
javascript高级编程之函数表达式 递归和闭包函数
Nov 29 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
Jan 26 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
Apr 27 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
Jun 08 Javascript
JS中mouseup事件丢失的原因与解决办法
Jun 14 Javascript
d3绘制基本的柱形图的实现代码
Dec 12 Javascript
微信小程序左右滚动公告栏效果代码实例
Sep 16 Javascript
微信小程序表单验证WxValidate的使用
Nov 27 Javascript
JavaScript嵌入百度地图API的最详细方法
Apr 16 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中一些可能会被忽略的问题
2013/06/21 PHP
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
js获取时间(本周、本季度、本月..)
2013/11/22 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
实例分析js和C#中使用正则表达式匹配a标签
2014/11/26 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
2016/07/01 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
解析vue、angular深度作用选择器
2019/09/11 Javascript
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
Python matplotlib画图实例之绘制拥有彩条的图表
2017/12/28 Python
python定时关机小脚本
2018/06/20 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
幼师自荐信范文
2013/10/06 职场文书
竞聘演讲稿范文
2014/01/12 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
高中班主任评语
2014/12/30 职场文书
安阳殷墟导游词
2015/02/10 职场文书
干部外出学习心得体会
2016/01/18 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
java版 简单三子棋游戏
2022/05/04 Java/Android
mybatis 获取更新记录的id
2022/05/20 Java/Android