Node.js文件操作方法汇总


Posted in Javascript onMarch 22, 2016

Node.js和其他语言一样,也有文件操作。先不说node.js中的文件操作,其他语言的文件操作一般也都是有打开、关闭、读、写、文件信息、新建删除目录、删除文件、检测文件路径等。在node.js中也是一样,也都是这些功能,可能就是api与其他语言不太一样。

一、同步、异步打开关闭

/**
 * Created by Administrator on 2016/3/21.
 */
var fs=require("fs");
//同步读 fs.openSync = function(path, flags, mode)
//模块fs.js文件中如上面定义的openSync 函数3个参数
//.1.path 文件路径
//2.flags 打开文件的模式
//3.model 设置文件访问模式
//fd文件描述
var fd=fs.openSync("data/openClose.txt",'w');
//fs.closeSync = function(fd)
fs.closeSync(fd);

//异步读写
//fs.open = function(path, flags, mode, callback_)
//fs.close = function(fd, callback)
fs.open("data/openColse1.txt",'w',function(err,fd) {
  if (!err)
  {
    fs.close(fd,function(){
      console.log("closed");
    });
  }
});

其中的flags其他语言也会有.其实主要分3部分 r、w、a.和C中的差不多。

1.r —— 以只读方式打开文件,数据流的初始位置在文件开始
2.r+ —— 以可读写方式打开文件,数据流的初始位置在文件开始
3.w ——如果文件存在,则将文件长度清0,即该文件内容会丢失。如果不存在,则尝试创建它。数据流的初始位置在文件开始
4.w+ —— 以可读写方式打开文件,如果文件不存在,则尝试创建它,如果文件存在,则将文件长度清0,即该文件内容会丢失。数据流的初始位置在文件开始
5.a —— 以只写方式打开文件,如果文件不存在,则尝试创建它,数据流的初始位置在文件末尾,随后的每次写操作都会将数据追加到文件后面。
6.a+ ——以可读写方式打开文件,如果文件不存在,则尝试创建它,数据流的初始位置在文件末尾,随后的每次写操作都会将数据追加到文件后面。

二、读写

1.简单文件读写

/**
 * Created by Administrator on 2016/3/21.
 */
var fs = require('fs');
var config = {
  maxFiles: 20,
  maxConnections: 15,
  rootPath: "/webroot"
};
var configTxt = JSON.stringify(config);

var options = {encoding:'utf8', flag:'w'};
//options 定义字符串编码 打开文件使用的模式 标志的encoding、mode、flag属性 可选
//异步
//fs.writeFile = function(path, data, options, callback_)
//同步
//fs.writeFileSync = function(path, data, options)

fs.writeFile('data/config.txt', configTxt, options, function(err){
  if (err){
    console.log("Config Write Failed.");
  } else {
    console.log("Config Saved.");
    readFile();
  }
});
function readFile()
{
  var fs = require('fs');
  var options = {encoding:'utf8', flag:'r'};
  //异步
  //fs.readFile = function(path, options, callback_)
  //同步
  //fs.readFileSync = function(path, options)
  fs.readFile('data/config.txt', options, function(err, data){
    if (err){
      console.log("Failed to open Config File.");
    } else {
      console.log("Config Loaded.");
      var config = JSON.parse(data);
      console.log("Max Files: " + config.maxFiles);
      console.log("Max Connections: " + config.maxConnections);
      console.log("Root Path: " + config.rootPath);
    }
  });
}
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe SimpleReadWrite.js
Config Saved.
Config Loaded.
Max Files: 20
Max Connections: 15
Root Path: /webroot

Process finished with exit code 0

2.同步读写

/**
 * Created by Administrator on 2016/3/21.
 */
var fs = require('fs');
var veggieTray = ['carrots', 'celery', 'olives'];

fd = fs.openSync('data/veggie.txt', 'w');
while (veggieTray.length){
  veggie = veggieTray.pop() + " ";
  //系统api 
  //fd 文件描述 第二个参数是被写入的String或Buffer
  // offset是第二个参数开始读的索引 null是表示当前索引
  //length 写入的字节数 null一直写到数据缓冲区末尾
  //position 指定在文件中开始写入的位置 null 文件当前位置
  // fs.writeSync(fd, buffer, offset, length[, position]);
  // fs.writeSync(fd, string[, position[, encoding]]);
  //fs.writeSync = function(fd, buffer, offset, length, position)
  var bytes = fs.writeSync(fd, veggie, null, null);
  console.log("Wrote %s %dbytes", veggie, bytes);
}
fs.closeSync(fd);

var fs = require('fs');
fd = fs.openSync('data/veggie.txt', 'r');
var veggies = "";
do {
  var buf = new Buffer(5);
  buf.fill();
  //fs.readSync = function(fd, buffer, offset, length, position)
  var bytes = fs.readSync(fd, buf, null, 5);
  console.log("read %dbytes", bytes);
  veggies += buf.toString();
} while (bytes > 0);
fs.closeSync(fd);
console.log("Veggies: " + veggies);
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe syncReadWrite.js
Wrote olives 7bytes
Wrote celery 7bytes
Wrote carrots 8bytes
read 5bytes
read 5bytes
read 5bytes
read 5bytes
read 2bytes
read 0bytes
Veggies: olives celery carrots     

Process finished with exit code 0

3.异步读写 和同步读写的参数差不多就是多了callback

/**
 * Created by Administrator on 2016/3/21.
 */
var fs = require('fs');
var fruitBowl = ['apple', 'orange', 'banana', 'grapes'];
function writeFruit(fd){
  if (fruitBowl.length){
    var fruit = fruitBowl.pop() + " ";
   // fs.write(fd, buffer, offset, length[, position], callback);
   // fs.write(fd, string[, position[, encoding]], callback);
   // fs.write = function(fd, buffer, offset, length, position, callback)
    fs.write(fd, fruit, null, null, function(err, bytes){
      if (err){
        console.log("File Write Failed.");
      } else {
        console.log("Wrote: %s %dbytes", fruit, bytes);
        writeFruit(fd);
      }
    });
  } else {
    fs.close(fd);
    ayncRead();
  }
}
fs.open('data/fruit.txt', 'w', function(err, fd){
  writeFruit(fd);
});

function ayncRead()
{
  var fs = require('fs');
  function readFruit(fd, fruits){
    var buf = new Buffer(5);
    buf.fill();
    //fs.read = function(fd, buffer, offset, length, position, callback)
    fs.read(fd, buf, 0, 5, null, function(err, bytes, data){
      if ( bytes > 0) {
        console.log("read %dbytes", bytes);
        fruits += data;
        readFruit(fd, fruits);
      } else {
        fs.close(fd);
        console.log ("Fruits: %s", fruits);
      }
    });
  }
  fs.open('data/fruit.txt', 'r', function(err, fd){
    readFruit(fd, "");
  });
}
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe asyncReadWrite.js
Wrote: grapes 7bytes
Wrote: banana 7bytes
Wrote: orange 7bytes
Wrote: apple 6bytes
read 5bytes
read 5bytes
read 5bytes
read 5bytes
read 5bytes
read 2bytes
Fruits: grapes banana orange apple  

Process finished with exit code 0

4.流式读写

/**
 * Created by Administrator on 2016/3/21.
 */
var fs = require('fs');
var grains = ['wheat', 'rice', 'oats'];
var options = { encoding: 'utf8', flag: 'w' };
//从下面的系统api可以看到 createWriteStream 就是创建了一个writable流
//fs.createWriteStream = function(path, options) {
//  return new WriteStream(path, options);
//};
//
//util.inherits(WriteStream, Writable);
//fs.WriteStream = WriteStream;
//function WriteStream(path, options)
var fileWriteStream = fs.createWriteStream("data/grains.txt", options);
fileWriteStream.on("close", function(){
  console.log("File Closed.");
  //流式读
  streamRead();
});
while (grains.length){
  var data = grains.pop() + " ";
  fileWriteStream.write(data);
  console.log("Wrote: %s", data);
}
fileWriteStream.end();

//流式读
function streamRead()
{
  var fs = require('fs');
  var options = { encoding: 'utf8', flag: 'r' };
  //fs.createReadStream = function(path, options) {
  //  return new ReadStream(path, options);
  //};
  //
  //util.inherits(ReadStream, Readable);
  //fs.ReadStream = ReadStream;
  //
  //function ReadStream(path, options)
  //createReadStream 就是创建了一个readable流
  var fileReadStream = fs.createReadStream("data/grains.txt", options);
  fileReadStream.on('data', function(chunk) {
    console.log('Grains: %s', chunk);
    console.log('Read %d bytes of data.', chunk.length);
  });
  fileReadStream.on("close", function(){
    console.log("File Closed.");
  });
}
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe StreamReadWrite.js
Wrote: oats 
Wrote: rice 
Wrote: wheat 
File Closed.
Grains: oats rice wheat 
Read 16 bytes of data.
File Closed.

Process finished with exit code 0

 个人觉得像这些api用一用感受一下就ok了,遇到了会用就行了。

Javascript 相关文章推荐
在JavaScript中实现类的方式探讨
Aug 28 Javascript
jquery 循环显示div的示例代码
Oct 18 Javascript
Knockout text绑定DOM的使用方法
Nov 15 Javascript
jquery删除指定子元素代码实例
Jan 13 Javascript
javascript 数组操作详解
Jan 29 Javascript
javascript遇到html5的一些表单属性
Jul 05 Javascript
跟我学习javascript的最新标准ES6
Nov 20 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
Feb 17 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
JS生成随机打乱数组的方法示例
Dec 23 Javascript
vue+ts下对axios的封装实现
Feb 18 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
Aug 05 Javascript
浅谈Sticky组件的改进实现
Mar 22 #Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
Mar 22 #Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 #Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
Mar 21 #Javascript
快速掌握Node.js事件驱动模型
Mar 21 #Javascript
快速掌握Node.js模块封装及使用
Mar 21 #Javascript
JS DOM实现鼠标滑动图片效果
Sep 17 #Javascript
You might like
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
js获取url中指定参数值的示例代码
2013/12/14 Javascript
TypeScript 学习笔记之基本类型
2015/06/19 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
拥有一个属于自己的javascript表单验证插件
2016/03/24 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
DIV+CSS+jQ实现省市联动可扩展
2016/06/22 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
类似于QQ的右滑删除效果的实现方法
2016/10/16 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
[16:43]Heroes19_剃刀(完美)
2014/10/31 DOTA
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
Python中函数参数匹配模型详解
2019/06/09 Python
Pandas中resample方法详解
2019/07/02 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
2013年军训通讯稿
2014/02/05 职场文书
导游词怎么写
2015/02/04 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
学生退学证明
2015/06/23 职场文书
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
python 实现图片特效处理
2022/04/03 Python