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 相关文章推荐
10个新的最有前途的JavaScript框架
Mar 12 Javascript
js中判断控件是否存在
Aug 25 Javascript
javascript弹出层输入框(示例代码)
Dec 11 Javascript
JS模拟并美化的表单控件完整实例
Aug 19 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
Apr 07 Javascript
Bootstrap框架下下拉框select搜索功能
Mar 26 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
JS html时钟制作代码分享
Mar 03 Javascript
jQuery实现动态给table赋值的方法示例
Jul 04 jQuery
vue-router beforeEach跳转路由验证用户登录状态
Dec 26 Javascript
JavaScript的级联函数用法简单示例【链式调用】
Mar 26 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
Aug 09 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
德生PL450的电路分析和低放电路的改进办法
2021/03/02 无线电
PHP中创建并处理图象
2006/10/09 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
pygame学习笔记(4):声音控制
2015/04/15 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
Django+Ajax+jQuery实现网页动态更新的实例
2018/05/28 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python实现的对一个数进行因式分解操作示例
2019/06/27 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
前台文员的岗位职责
2013/11/14 职场文书
机械专业应届毕业生自荐书
2014/06/12 职场文书
2014年度党员自我评议
2014/09/13 职场文书
个人承诺书格式范文
2015/04/29 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android