• Nodejs读写文件


         nodejs对文件的读写还是相当灵活的,可以根据不同的场景来选择不同的方法,具体可以参见:Nodejs fs

         一.直接操作文件

         最简单的两个fs.readFilefs.writeFile

       举例:这个程序的功能是将一个比较大json格式的文件转换成你想自己要格式的文件。

    var fs = require('fs');
    fs.readFile('./json.json',function(err,data){
    if(err) throw err;


    var jsonObj = JSON.parse(data);
    var space = ' ';
    var newLine = '\n';
    var chunks = [];
    var length = 0;

    for(var i=0,size=jsonObj.length;i<size;i++){
    var one = jsonObj[i];
    //what value you want
    var value1 = one['value1'];
    var value2 = one['value2'];
    ....
    var value = value1 +space+value2+space+.....+newLine;
    var buffer = new Buffer(value);
    chunks.push(buffer);
    length += buffer.length;
    }

    var resultBuffer = new Buffer(length);
    for(var i=0,size=chunks.length,pos=0;i<size;i++){
    chunks[i].copy(resultBuffer,pos);
    pos += chunks[i].length;
    }

    fs.writeFile('./resut.text',resultBuffer,function(err){
    if(err) throw err;
    console.log('has finished');
    });

    });

           它的原理是将文件数据一次性全部读入内存,优点就是接下来都是在内存的操作,速度会很快。但缺点也很明显,就是当文件非常大时,会造成内存溢出。  

        

           二. 使用文件流

       2.1 读取文件,api相见:fs.createReadSream 和 fs.createWriterStream

           以下代码实现的功能就是通过文件流来实现图片的复制:

    var fs = require('fs');
    var rOption = {
    flags : 'r',
    encoding : null,
    mode : 0666
    }

    var wOption = {
    flags: 'a',
    encoding: null,
    mode: 0666
    }

    var fileReadStream = fs.createReadStream('./myjpg.jpg',rOption);
    var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg',wOption);

    fileReadStream.on('data',function(data){
    fileWriteStream.write(data);

    });

    fileReadStream.on('end',function(){
    console.log('readStream end');
    fileWriteStream.end();
    });

           这里再补充在流中非常有用的一个函数:pipe,它以用来把当前的可读流和另外一个可写流连接起来。可读流中的数据会被自动写入到可写流中。使用起来非常方便,依然实现上例中的功能:      

    var fs = require('fs');

    var fileReadStream = fs.createReadStream('./myjpg.jpg');
    var fileWriteStream = fs.createWriteStream('./new_myjpg.jpg');
    fileReadStream.pipe(fileWriteStream);

    fileWriteStream.on('close',function(){
    console.log('copy over');
    });

           用这个函数可以轻松地实现一个静态资源服务器:

    var http = require("http");
    var fs = require("fs"),
    var path = require("path"),
    var url = require("url");

    var server = http.createServer(function(req, res) {
    var pathname = url.parse(req.url).pathname;
    console.log(pathname);
    var filepath = path.join("./tmp", "wwwroot", pathname);
    console.log(filepath);
    var stream = fs.createReadStream(filepath, {flags : "r", encoding : null});
    stream.on("error", function() {
    res.writeHead(404);
    res.end();
    });
    stream.pipe(res);
    });
    server.on("error", function(error) {
    console.log(error);
    });
    server.listen(8088,function(){
    console.log('server listen on 8088');
    });
  • 相关阅读:
    加入创业公司有什么利弊
    Find Minimum in Rotated Sorted Array II
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Find Minimum in Rotated Sorted Array
    Remove Duplicates from Sorted Array
    Spiral Matrix
    Spiral Matrix II
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/lengyuhong/p/2265164.html
Copyright © 2020-2023  润新知