初学Node(五)文件I/O

文件读写

  Node的出现的一个亮点就是让JS也有了读写文件的能力,而且实现起来要比其他语言更简单,对文件的一些操作我们都可通过fs模块来完成。fs即fileSystem的缩写,fs模块可以完成对文件的所有操作。

  可以通过fs.readFileSync来同步的读取文件:

var fs = require("fs");
var data = fs.readFileSync("content.txt");
console.log(data.toString());

  fs已经帮我们实现了一个读取文件的API,我们不用再像其他语言一样还要实例化IO对象,直接引入fs模块,调用readFileSync这个函数即可。

  对文件的读取也可以通过fs.readFile(path,callback)来完成,这是一个异步的读取文件API,所以参数除了要读取的文件意外还需要一个读取完成的回调函数,相比同步读取,异步读取更加高效和实用:

var fs = require("fs");
fs.readFile("content.txt",function(err,data){
    if(err){
        return console.log(err.stack);
    }
    console.log("--文件读取成功--");
    console.log(data.toString());
});

  可以通过fs.writeFile来实现将内容写入到一个文件,如果文件已经错在就会改变里面的内容,如果不存在就创建然后在写入内容:

var fs = require("fs");
var data = "我是通过JS写入到文件的内容";
fs.writeFile("JSContent.txt",data,function(err){
    if(err){
        return console.log(err.stack);
    }
    console.log("文件写入完毕");
});

  一个小demo测试读写文件的使用:

   新建一个file文件夹,在里面新建新建一个template.html、head.txt、body.txt、foot.txt、demo.js:

  template.html内容如下:

 <body>
  {{head.txt}}
  {{body.txt}}
  {{foot.txt}}
 </body>

  head.txt如下:

<h1>我是头部</h1>

  body.txt如下:

<div>我是主体</div>

  foot.txt如下:

<footer>我是尾部</footer>

  demo.js如下:

var fs = require("fs");
fs.readFile("template.html",function(err,data){
    if(err){
        return console.log("读取文件错误");
    }
    var result = data.toString().replace(/{{*.*}}/g,function(one){
        return fs.readFileSync(one.substring(2,one.length-2));
    });
    fs.writeFile("result.html",result,function(err){
        if(err){
            return console.log("生成文件错误");
        }
        console.log("生成文件成功");
    });
});

  我们在命令行中执行node.js就会生成一个正常的result.html文件了。

以流的方式来读写文件

  利用流来读取文件:

var fs = require("fs");
var readStream = fs.createReadStream("content.txt");
readStream.setEncoding("UTF8");
readStream.on("data",function(data){
    console.log(data);
});
readStream.on("end",function(){
    console.log("文件读取完毕");
});
readStream.on("error",function(err){
    console.log("读取文件错误:"+err.stack);
});

  首先利用fs模块创建一个文件的读取流,然后设置读取内体的字符设置,读取流有三个事件分别为data,end,error,data即读取文件内容的时候,end即内容读取完毕时,error即读取文件发生错误时,我们可以为每一个事件定义对应的事件处理函数来完成我们的操作。

  利用流来将内容写入文件:

var fs =require("fs");
var writeStream = fs.createWriteStream("content.txt");
writeStream.write("我是通过写入流写入的内容","UTF8");
writeStream.end();
writeStream.on("finish",function(){
    console.log("文件写入成功");
});
writeStream.on("error",function(err){
    console.log("写入文件时发生错误:"+err.stack);
});

  使用方式和读取流基本一致,不过事件换成了finish事件,表示文件写入成功时的事件,这个事件只有在调用end()函数之后才能被触发,end()表示内容已经写入完毕了。

  当我们在实现一个复制文件的功能时,如果原始文件过大这个操作就会很耗时,此时我们就要利用管道流来优化这个过程,管道流在复制文件时并不会在将第一个文件的内容读取完毕后再写入目标文件,而是每读取一段内容就将这段内容写入到文件,然后在读在些一直到文件复制完毕:

var fs =require("fs");
var readStream = fs.createReadStream("content.txt");
var writeStream = fs.createWriteStream("result.txt");
readStream.pipe(writeStream);
console.log("复制完成");

  pipe函数就是我们所说的管道,我们可以把它看做是连接读取流和写入流的桥梁。

时间: 2024-11-05 19:29:57

初学Node(五)文件I/O的相关文章

Node.JS 文件读写,把Sheet图集转换为龙骨动画图集

Node.JS 文件读写,把Sheet图集数据转换为龙骨动画图集数据 var fs = require("fs") var readline = require("readline"); var rl = readline.createInterface({ input:process.stdin, output:process.stdout }); var path = undefined; var dbName = undefined; rl.question(

Node.js文件模块fs监视文件变化

Node.js文件模块fs监视文件变化 Node中文件模块fs监视文件的函数源码如下: fs.watch = function(filename) { nullCheck(filename); var watcher; var options; var listener; if (util.isObject(arguments[1])) { options = arguments[1]; listener = arguments[2]; } else { options = {}; listen

Node复制文件

本人开发过程中,经常遇到,要去拷贝模板到当前文件夹,经常要去托文件,为了省事,解决这个问题,写了一个node复制文件. //流 stream 管道 pipe 管道 //如果想在读取流和写入流的时候做完全的控制,可以使用数据事件.但对于单纯的文件复制来说读取流和写入流可以通过管道来传输数据. var fs = require("fs"); var path = require("path"); /* * 复制目录中的所有文件包括子目录 * @src param{ St

python 初学02 替换文件内容

用python替换文件内容的方法,搜了网上许多例子,又请教了朋友. 把完整的实现流程写一下,希望对大家有所帮助. 要求:目标文件中有一个字段为no=x x为0.1.2……,将其替换为no=0 1 import re 2 fobj = open("goal.ini", "r") 3 f = re.sub("no=\d+", "no=0", fobj.read()) 4 fobj.close() 5 fobj = open(&qu

node 复制文件

1. node 复制小文件 需要引用模块 require( 'fs' ): 使用 writeFileSync 和 readFileSync 复制小文件,大文件时会拖垮内存,不建议使用. 代码 var fs = require( 'fs' ); function copyfile(src,dir) { fs.writeFileSync(dir,fs.readFileSync(src)); } copyfile( 'D:\\from\\config.json', 'D:\\log\\dd.json'

初学node.js安装模块时创建空文件用taobao镜像安装速度变快

在C:\Users\xx文件夹下按Shift,单击鼠标右键选择‘在此处打开命令行’,输入ren xx.x .npmrc   /*此处把一个已知文件xx.x修改为空文件名的文件.npmrc*/或者用一般的IDE:EditPlus或者sbulime直接创建.npmrc文件,接下编辑该文件输入registry = http://registry.npm.taobao.org在npm安装模块的速度就会变快.在初次安装nodejs时命令行输入npm可能最报错,可以先安装一个模块后再敲npm,例如npm i

初学Node.js -环境搭建

从毕业一直到现在都是在做前端,总感觉缺少点什么,java? PHP? .Net? 框架太多了,学起来不好掌握,听说node.js挺牛的,我决定把node.js好好的学一下.首先是环境的配置,这个配置真的折磨了我好久,每当我感觉配好了之后,程序运行他就开始报错,没有这个模块,没有那个模块的,然后我把node卸载了,准备重新安装 好好的研究一下环境的搭建. 第一,官网下载node的msi安装包,然后默认安装就行了. 第二,安装两个全局模块 在命令行输入: npm install -g express

node.js 文件路径及环境问题

node.js 安装在安装时提供的根目录下 npm 安装的全局包 在  用户/用户名/AppData/Roaming/npm/node-modules下 npm 安装的本地文件在命令行根目录下 关于在node中创建项目 有两种方法 1  通过express 首先安装express框架: $ npm install -g express-generator 创建项目(创建的项目位于命令行根目录下): express helloworld 2 通过 mkdir nodetext && cd n

node复制文件夹,压缩zip,上传

一:用到的模块和简单介绍 npm文档:request :node请求的模块,可以给用程序请求服务器的接口https://www.npmjs.com/package/requestfs:读写文件的,很常用https://www.npmjs.com/package/fspath:路径,各种给文件夹弄路径什么的https://www.npmjs.com/package/pathjs-cookie:获取cokie的,在请求的时候需要用到https://www.npmjs.com/package/js-c