Node.js文件操作一

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了,遇到了会用就行了。

更多相关文章
  • 前面的博客 Node.js文件操作一中主要是对文件的读写操作,其实还有文件这块还有一些其他操作. 一.验证文件path是否正确(系统是如下定义的) fs.exists = function(path, callback) { if (!nullCheck(path, cb)) return; var ...
  • 在Node.js中操作文件系统(一)
    在Node.js中操作文件系统      在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作时,可以使用readFile与readFileSync方法.在所有这些方法中,方法名中具有 ...
  • 转载自知乎:http://www.zhihu.com/question/21567720 -----------------------------------------------------------------------------------------------------Node ...
  • Node.js文件系统fs模块
    Node.js 文件系统封装在 fs 模块是中,它提供了文件的读取.写入.更名.删除.遍历目录.链接等POSIX 文件系统操作. 与其他模块不同的是,fs 模块中所有的操作都提供了异步的和 同步的两个版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileS ...
  • node.js基础:HTTP服务器
    一个HTTP服务器响应 var http = require('http'); http.createServer(function(request,response){ response.end('hello world!'); }).listen(3000);   读取请求头及设定响应头 // ...
  • Node.js模块系统
    Node.js模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ ...
  • Node.js的线程和进程
    http://www.admin10000.com/document/4196.html 前言 很多Node.js初学者都会有这样的疑惑,Node.js到底是单线程的还是多线程的?通过本章的学习,能够让读者较为清晰的理解Node.js对于单/多线程的关系和支持情况.同时本章还将列举一些让Node.j ...
  • 遍历目录 递归算法 遍历目录时一般使用递归算法,否则就难以编写出简洁的代码. 递归算法与数学归纳法类似,通过不断缩小问题的规模来解决问题 function factorial(n) { if (n === 1) { return 1; } else { return n * factorial(n ...
一周排行
  • 一.软件包a) squid-2.6.STABLE6.tar.bz2二.安装步骤a) Tar jxvf squid-2.6.STABLE6.tar.bz2b) ./configure --prefix=/usr/loc ...
  • 连载C#通讯串口和网络框架的设计与实现-6.通讯控制器的设计
    目       录 第六章           通讯控制器的设计... 2 6.1     ...
  • 网络客户端工具:elinks-->links:web服务的客户端工具  elinks [OPTION...] [URL]...    -dump:在显示网页所有内容后退出    -source:查看网页的源代码 ...
  •      最近在做一个项目,需要一个即时聊天工具,先打算有第三方环信(http://www.easemob.com),但是最终老板不允许,要自己开发用自己的服务器,哎!如果有需要的可以去看看这个环信,真的不错.进入今 ...
  • Linux-Windows实现rsyncLinux为SERVER端,windows为 CLIENT端Rsync 整 理 文 档一.Server端的配置1. 用的rsync的版本是rsync-2.6.8.tar.gz, ...
  • jquery日历选择插件收集
    插件一:jquery日历选择插件插件源码下载:http://down.51cto.com/ ...
  • 好长时间没发新文章,最近实在很忙.不过每天早上的半个小时仍然是我状态极佳的时候,看上十几页的英文资料能让自已更充实,只是没时间再往博客上小结了.我也争取尽快补上.     意外的惊喜,昨天无意间发现卡上竟然多了176 ...
  • 职场必备的课程 https://www.coursera.org/account/signedin?topic_name=%E8%81%B7%E5%A0%B4%E7%B4%A0%E9%A4%8A%20%28Profe ...
  • C#将DLL嵌入到exe当中
    我就直接上内容了.虽然能看懂,知道原理.但是自己还是无法独立写出来.看来还需要多学习啊.. ...
  • 一.含义 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”: 这个“规则字符串”用来表达对字符串的一种过滤逻辑. 二.作用 1. 给定的字符串是否符 ...