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调用WebService的示例
Apr 07 Javascript
JavaScript 判断浏览器是否支持SVG的代码
Mar 21 Javascript
浅谈Javascript中的12种DOM节点类型
Aug 19 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 Javascript
angular实现IM聊天图片发送实例
May 08 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
详解js类型判断
May 22 Javascript
Vuex 使用 v-model 配合 state的方法
Nov 13 Javascript
JS实现马赛克图片效果完整示例
Apr 13 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
Feb 16 Javascript
解决ant Design中Select设置initialValue时的大坑
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
PHP 和 MySQL 基础教程(四)
2006/10/09 PHP
PHP 数字左侧自动补0
2008/03/31 PHP
第五章 php数组操作
2011/12/30 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
关于javascript function对象那些迷惑分析
2011/10/24 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
解决jquery实现的radio重新选中的问题
2015/07/03 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
[00:17]DOTA2荣耀之路5:It’s a disastah!
2018/05/28 DOTA
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
用Python编程实现语音控制电脑
2014/04/01 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
同时安装Python2 & Python3 cmd下版本自由选择的方法
2017/12/09 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
用Django写天气预报查询网站
2018/10/21 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
社区党员公开承诺书
2014/08/30 职场文书
2014年政教处工作总结
2014/12/20 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang