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 相关文章推荐
拖动一个HTML元素
Dec 22 Javascript
THREE.JS入门教程(4)创建粒子系统
Jan 24 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
Nov 19 Javascript
深入理解Javascript作用域与变量提升
Dec 09 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
node.js中的fs.symlinkSync方法使用说明
Dec 15 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
Javascript中的高阶函数介绍
Mar 15 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
微信小程序实现签到功能
Oct 31 Javascript
在pycharm中开发vue的方法步骤
Mar 04 Javascript
微信小程序实现打卡签到页面
Sep 21 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
使用php清除bom示例
2014/03/03 PHP
简单谈谈favicon
2015/06/10 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
详解php实现页面静态化原理
2017/06/21 PHP
JavaScript延迟加载
2021/03/09 Javascript
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
使用documentElement正确取得当前可见区域的大小
2014/07/25 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
jQuery设置Easyui校验规则(推荐)
2016/11/21 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
解决vue-router在同一个路由下切换,取不到变化的路由参数问题
2018/09/01 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
vue实现购物车的监听
2020/04/20 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
在IIS服务器上以CGI方式运行Python脚本的教程
2015/04/25 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
美体小铺印度官网:The Body Shop印度
2019/10/17 全球购物
什么是TCP/IP
2014/07/27 面试题
高职助产应届生自荐信
2013/09/24 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS