博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Node.js文件操作一
阅读量:7136 次
发布时间:2019-06-28

本文共 7453 字,大约阅读时间需要 24 分钟。

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.jsConfig Saved.Config Loaded.Max Files: 20Max Connections: 15Root Path: /webrootProcess 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.jsWrote olives  7bytesWrote celery  7bytesWrote carrots  8bytesread 5bytesread 5bytesread 5bytesread 5bytesread 2bytesread 0bytesVeggies: 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.jsWrote: grapes  7bytesWrote: banana  7bytesWrote: orange  7bytesWrote: apple  6bytesread 5bytesread 5bytesread 5bytesread 5bytesread 5bytesread 2bytesFruits: 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.jsWrote: 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了,遇到了会用就行了。

转载地址:http://cacrl.baihongyu.com/

你可能感兴趣的文章
AS上传Library到JCenter 教程+踩坑记录
查看>>
_shortMethodDescription 用于LLDB 进行打断点
查看>>
graphql-java使用手册:part6 使用 Dataloader
查看>>
sklearn 文本分类记录 [1] 官方文档
查看>>
Zepto中数据缓存原理与实现
查看>>
《javascript高级程序设计》笔记:正则表达式
查看>>
MySQL 预处理语句prepare、execute、deallocate的使用
查看>>
D3中常用的比例尺
查看>>
Jenkins + Pipeline 构建自动化发布
查看>>
基于牛客网Js v8引擎提供的读/写方法做的调试页面
查看>>
Facade---Laravel学习笔记
查看>>
腾讯CDC面试题之五子棋 - dom版(ES6)
查看>>
npm 妙用
查看>>
【进阶】深入redis,然后正确使用它
查看>>
Akka系列(三):监管与容错
查看>>
Lagom参考指南(三)
查看>>
Laravel 5.4 入门系列 1. 安装
查看>>
JVM 内存模型
查看>>
微信公众号编辑助手
查看>>
使用 telegram 收发微信消息
查看>>