Node.js与文件系统操作(一)

    Node.js中的fs模块与文件系统操作相关,主要用于实现文件系统的操作。fs模块中提供了大量与文件系统相关的操作方法,这些方法分为同步方法和异步方法,开发人员可以根据实际需要进行选择,从而对文件系统进行操作。

一、fs模块的同步方法和异步方法

    fs模块中提供了很多与文件操作相关的方法,例如目录创建,文件创建,文件内容的写入与删除等操作。这些与文件操作相关的方法在对文件系统进行操作时大多都有同步与异步这两种方式。
    在这些方法中以Sync为后缀的方法都是同步方法,同步方法在执行时需要立即返回操作结果,一个同步方法在操作结束之前不可以执行之后的方法。不以Sync作为后缀的方法都是异步的操作方法,异步方法的特点是不会阻塞程序的执行,异步方法的执行结果是作为回调函数的参数进行返回的。在使用异步方法进行文件操作的时候,并不能保证方法执行结果返回的顺序,因为每一个异步方法进行文件操作时需要的时间长短是不完全相同的,时间较短的操作方法会先返回操作结果,耗时长的异步方法后返回结果。

二、对文件的读写操作

  • readFile()方法和readFileSync()方法:
        readFile()方法用于对文件以异步的方式进行读操作,readFile()方法用于对文件以同步的方式进行读操作。程序示例:
    (1)创建readFile.txt文本文件作为异步方法读取内容的文件:
使用异步的方法读取文件内容。

    (2)创建readFileSync.txt文本文件作为同步方法读取内容的文件:

使用同步的方法读取文件内容。

    (3)创建app.js:

var fs = require("fs"); //加载fs模块

/*
*使用异步的方式读取文件内容
*/
fs.readFile('./readFile.txt', function(err, data){
    //如果读取文件过程中发生错误则将错误信息输出
    if(err){
        console.log(err);
    }else{
        console.log(data.toString());   //使用toString()方法将读取到的内容转换成字符串并输出
    }
});

/*
*使用同步的方式读取文件内容
*/
try{
    var content = fs.readFileSync('./readFileSync.txt');
    console.log(content.toString());    //使用toString()方法将读取到的内容转换成字符串并输出
}catch(e){
    console.log('读取文件内容时发生错误:' + e);
}

    程序运行截图:


readFile()方法和readFileSync()方法

    异步读取文件内容的readFile()方法可以接收三个参数:

readFile(filename, [options], callback);
  • filename:必选参数,表示被读取的文件的完整路径以及文件名称。
  • options:可选参数,表示读取文件时需要使用的选项:
options选项 描述
‘r’ 读取文件。
‘r+’ 读取并写入文件。
‘rs’ 以同步方式读取文件并且忽略本地文件系统缓存。
‘w’ 写入文件,如果文件不存在就创建文件。
‘wx’ 以排他的方式写入文件。
‘w+’ 读取并写入文件。
‘wx+’ 读取并写入文件,是以排他的方式打开文件。
‘a’ 追加写入文件,如果文件不存在就创建文件。
‘ax’ 追加并写入文件,以排他的方式打开文件。
‘a+’ 读取并追加文件,如果文件不存在就创建文件。
  • callback:必选参数,表示文件读取完成之后返回数据的回调函数。程序示例:
function(err, data){
    //回调函数体
}

  • writeFile()方法和writeFileSync()方法
        writeFile()方法和writeFileSync()方法都可以向指定的文件中写入文件内容。程序示例:
var fs = require("fs");

/*
*以异步的方式向文件中写入内容
*/
var string = "通过异步方式写入文件的内容";
fs.writeFile('./writeFile.txt', string, function(err){
    if(err){
        console.log('向文件中写入内容时发生错误:' + err);
    }else{
        console.log('向文件中写入内容成功。');
    }
});

    程序运行截图:


writeFile()方法
fs.writeFile(filename, data, [options], callback);

    writeFile()方法中可以接受以下四个参数:

  • filename:必选参数,表示被写入内容的文件,包括文件的完整路径以及文件名称。
  • data:必选参数,表示被写入文件的内容,该参数可以是字符串也可以是Buffer示例对象的缓存区中的内容。
  • options:可选参数,该参数是一个对象,用于指定在写入文件时需要使用的选项。该对象包括的属性有flag属性,mode属性,encoding属性。flag属性表示对该文件执行何种操作,flag支持的选项有:
flag选项 说明
‘r’ 读取文件。
‘r+’ 读取并写入文件。
‘rs’ 以同步方式读取文件并且忽略本地文件系统缓存。
‘w’ 写入文件,如果文件不存在就创建文件。
‘wx’ 以排他的方式写入文件。
‘w+’ 读取并写入文件。
‘wx+’ 读取并写入文件,是以排他的方式打开文件。
‘a’ 追加写入文件,如果文件不存在就创建文件。
‘ax’ 追加并写入文件,以排他的方式打开文件。
‘a+’ 读取并追加文件,如果文件不存在就创建文件。

    mode属性可以用于指定该文件被打开时的读写权限,默认值为066(可读可写)。该属性值是用一个3位数字表示文件或目录所有者、所属组以及其他人的读写权限。1表示可执行权限,2表示可写权限,4表示可读权限。
    encoding属性可以用于指定以何种字符编码方式将内容写入到文件中。默认的编码方式是“utf8”,也可以改成“base64”、“ascii”或者其他的字符编码方式。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351