Node.js 文件系统fs模块

Node.js 文件系统fs模块

在fs模块中,使用close方法与closeSync方法以关闭文件

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

壹、fs模块的联合具名方法和异步方法

Node.js 文件系统封装在 fs
模块是中,它提供了文件的读取、写入、更名、删除、遍历目录、链接等POSIX
文件系统操作。

fs.appendFile(filname,data,[options],callback)
fs.appendFileSync(filename,data[options])

二.壹 文件的壹体化读写

能够动用readFile方法或许readFileSync方法完整读取叁个文件:

fs.readFile(filename,[options],callback)
//第一个参数:必选指定读取文件的完整文件路径及文件名
第二个参数:指定读取文件时需要使用的选项,在该参数值对象中可以使用flag属性指定对该文件采取什么操作,默认为‘r’
option:
    flag'r':读取文件,如果文件不存在则抛出异常
        'r+':读取并写入文件,如果文件不存在则抛出异常
        'rs':以同步方式读取文件并通知操作系统忽略本地文件系统缓存,如果文件不存在则抛出异常。因为本属性值忽略本地缓存,适用于操作网络文件系统,但由于其对性能产生一定的负面影响,不建议在其他环境下使用
        'w':写入文件,如果文件不存在则创建文件,如果文件存在则清空文件内容
        'wx':作用与'w'类似,但以排他方式写入文件
        'w+':读取并写入文件。如果不存在则创建文件,如果该文件已存在则清空文件内容             
        'wx+':作用与'w+'类似,但是以排他方式写入文件             
        'a':追加写入文件,如果文件不存在则创建文件
        'ax':作用与'a+'类似,但是以排他方式打开文件
    encoding:
        utf8,ascii,base64,
callback(err,data){
    //回调函数代码略
}
//第一个参数为读取文件操作失败时触发的错误对象
第二个参数值为读取到的文件内容

在选取同步方法读取文件时,使用readFileSync方法:

var data = fs.readFileSync(filename,[options])

eg:

var fs = require('fs')
try{
    var data = fs.readFileSync('./text.txt','utf8')
    //在控制台中输出文件内容
    console.log(data) 
}catch(ex){
    console.log('读取文件时发生错误')
}

在完整写入一个文书时,利用fs模块中的writeFile方法或许writeFileSync方法

fs.writeFile(filename,datda,[options],callback)
//第一个参数:用于指定被写入文件的完整文件路径及文件名
第二个参数:用于指定需要写入的内容,参会素可以为一个字符串或一个Buffer对象
第三个参数:指定写入文件时需要的选项
        flag属性:用于指定该文件采用何种操作,默认为'w'
        mode属性:指定当文件被打开时对文件的读写权限,默认为0666(可读写),第一位必须为0,第二位用于规定文件或目录所有者的权限,第三位为文件或目录所属用户组的权限,第四位为其他用户权限
            1:执行权限
            2:写权限
            4:读权限
        encoding属性:指定使用何种编码格式来写入文件,:utf8 ascii base64

callback(err){
    //回调函数代码
}

在运用同步格局写入文件时,使用writeFileSync方法:

fs.writeFileSync(filename,data,[options])

在将3个字符串或3个缓存区中的数据追加到二个文本后面部分时,可选择fs模块中的appendFile只怕appendFildSync方法

fs.appendFile(filname,data,[options],callback)
fs.appendFileSync(filename,data[options])

Node.js中的fs模块与文件系统操作相关,首要用以落到实处文件系统的操作。fs模块中提供了大量与文件系统相关的操作方法,那些办法分为同步方法和异步方法,开采人士能够依靠实际必要张开抉择,从而对文件系统举办操作。

fs.open

fs.open(path, flags, [mode], [callback(err, fd)])是POSIX open 函数的
封装,与C 语言规范库中的 fopen 函数类似。它承受多少个必选参数,path
为文件的门路, flags 能够是以下值。

  • r :以读取形式展开文件。
  • r+ :以读写形式张开文件。
  • w :以写入形式张开文件,假如文件不存在则开创。
  • w+ :以读写方式张开文件,借使文件不设有则开创。
  • a :以追加方式展开文件,假如文件不设有则创建。
  • a+ :以读取追加方式展开文件,假使文件不存在则成立

var data = fs.readFileSync(filename,[options])

二.2 从钦命地点处初阶读写文件

先是须求使用fs模块中的open方法恐怕openSync方法张开文件,

fs.open(filename,flags,[mode],callback)
其中callback参数为:function(err,fd){
                        //回调函数代码
                    }
//第一个参数为打开文件操作失败时所触发的错误对象,
第二个参数为一个整数值,代表打开文件时返回的文件描述符

接纳同步格局张开文件时,使用openSync方法:

var fd = fs.openSync(filename,flag,[mode])

在开垦文件从此,能够在回调函数中使用fs模块中的read方法也许readSync方法从文件的钦定地点处读取文件,也得以利用fs模块中的write方法大概writeSync方法从文件的钦赐处伊始写入数据

第3介绍read方法:

fs.read(fd,buffer,offset,length,position,callback)
//第一个参数:open方法所所使用的回调函数中返回的文件描述符或openSync方法返回的文件描述符;
第二个参数:英语指定将文件数据读取到哪个缓存区;
第三个参数:整数,用于指定向缓存区中写入数据时的开始位置,以字节为单位
第四个参数:整数,指定从文件中读取的字节数
第五个参数:整数,指定读取文件时开始位置
callback(err,bytesRead,buffer){
    //回调函数代码
}
err:读取文件操作失败时触发的错误对象
bytesRead实际读取的字节数
buffer:被读取的缓存区对象

使用同步格局展开文件时,使用readSync方法:

var byteRead = fs.readSync(fd,buffer,offset,length,position)

在开发文件后,使用fs模块中的write方法或然writeSync方法从三个缓存区中读取数据并且从文件的钦赐处初叶吸食这一个多少

fs.write(fd,buffer,offset,length,position,callback)

    其中callback为function(err,written,buffer){
                        //回调函数代码
                }
eg:
  1 var fs = require('fs')
  2 var buf = new Buffer('我喜欢编程')
  3 fs.open('./message.txt','w',function(err,fd){
  4         fs.write(fd,buf,3,9,0,function(err,written,buffer){
  5                 if(err)console.log("写文件操作失败")
  6                 console.log("写文件操作成功")
  7         })
  8 })

在使用同步格局写入文件时,使用writeSync 方法

fs.writeSync(fd,buffer,offset,length,position)

在fs模块中,使用close方法与closeSync方法以关闭文件

fs.close(fd,[callbcak])
fs.closeSync(fd)

调用close方法前,能够采纳fsyn方法将缓存区内容全方位写入文件,幸免出现遗漏数据

fs.fsyn(fd,[callback])

writeFile()方法中得以承受以下多少个参数:

fs.readFile

Node.js读取文件函数语法如下:

fs.readFile(filename,[encoding],[callback(err,data)])
  • filename(必选),表示要读取的文件名。
  • encoding(可选),表示文件的字符编码。
  • callback 是回调函数,用于吸收接纳文件的内容。

1经不指 定 encoding,则 callback 便是第一个参数。回调函数提供多少个参数
err 和 data,err 表 示有没错误产生,data 是文件内容。假诺内定了
encoding,data 是二个深入分析后的字符 串,不然 data 将会是以 Buffer
格局表示的二进制数据。

诸如以下顺序,大家从content.txt 中读取数据,但不点名编码:

var fs = require('fs'); 
fs.readFile('content.txt', function(err, data) { 
    if(err) { 
        console.error(err); 
    } else{ 
        console.log(data); 
    } 
});

倘使content.txt 中的内容是UTF-八 编码的 Text 文本文件示例,运转结果如下:

<Buffer 54 65 78 74 20 e6 96 87 e6 9c ac e6 96 87 e4 bb b6 e7 a4 ba e4 be 8b>

其1顺序以贰进制的格局读取了文件的内容,data 的值是 Buffer
对象。假如大家给

fs.readFile 的 encoding 指确定人员编制码:

var fs = require('fs'); 
    fs.readFile('content.txt', 'utf-8', function(err, data) { 
    if (err) { 
        console.error(err); 
    } else { 
        console.log(data); 
    } 
});

那就是说运营结果则是:

Text 文本文件示例

当读取文件出现错误时,err 将会是 Error 对象。倘若content.txt
不设有,运转前边 的代码则会产出以下结果:

{ [Error: ENOENT, no such file or directory 'content.txt'] errno: 34, code: 'ENOENT', 
path: 'content.txt' }

fs.readFileSync('./file.html',function(err,data){
  //回调函数代码
  })
fs.readFileSync('./otrher.html',function(err,data){
  //回调函数代码
  })

2. 对文件推行读写操作

  • callback:必选参数,表示文件读取完结现在回来数据的回调函数。程序示例:

一、fs 模块函数表

图片 1

图片 2

二.壹 文件的完整读写

一. 联合方法与异步方法

在Node.js中,使用fs模块来兑现全数关于文件及目录的创始、写入及删除操作。,在fs模块中,全数对文件及目录的操作都能够应用同步与异步那三种办法。那两边分别是:同步方法即刻赶回操作结果,在选拔同步方法推行的操作截止在此之前,无法举办后续代码,代码类似如下:

Var fs = require('fs')
var data = fs.readFileSysnc('./index.html','utf8')
//等待操作返回结果,然后利用该结果
console.log(data)

而异步方法将操作结果作为回调函数的参数进行再次来到,在艺术调用之后,能够马上施行后续代码,代码如下:

var fs = require('fs')
fs.readFile('./index.html','utf8'.function(err,data){
    //操作结果作为回调函数的第二个参数返回
    console.log(data)
})

除此以外,当使用如下所示的法子调用八个异步方法时,并不能够确认保证操作结果的回来顺序

fs.readFile('./file.html',function(err,data){
    //回调函数代码
    })
fs.readFile('./otrher.html',function(err,data){
    //回调函数代码
    })

在上述代码中,大家同不日常候执行八个公文的读取操作,可是并不有限支撑哪个操作结果先辈再次回到。如若要确认保障在二个问价读取实现后再读取两1个文本,大家应利用如下方法:

fs.readFileSync('./file.html',function(err,data){
    //回调函数代码
    })
fs.readFileSync('./otrher.html',function(err,data){
    //回调函数代码
    })
  • writeFile()方法和writeFileSync()方法
    writeFile()方法和writeFileSync()方法都能够向钦命的文本中写入文件内容。程序示例:

三、Fs与Stream重要

  ”Stream” 具有异步的特征。作者么能够将3个文件或1段内容分成未知个制定大小的 “chunk” 去读取,每读取到四个 “chunk” 大家就将她输出。直到文件读完。那就好像 “http壹.一” 种匡助的 “Transfer-Encoding: chunked” 那样。 (“chunk”能够以别的的花样存在,NodeJS默许是以 “Buffer” 的款式存在,那样更加高效)。NodeJS中的”Stream”具有Unix系统上的2个特级天性正是 (“pipe” —— 管道)。

  createReadStream()

  createReadStream方法往往用来打开大型的文本文件,创立1个读取操作的数据流。所谓大型文本文件,指的是文件文件的体积极大,读取操作的缓存装不下,只好分成三回发送,每一遍发送会接触八个data事件,发送甘休会触发end事件。

var fs = require('fs');

function readLines(input, func) {
  var remaining = '';

  input.on('data', function(data) {
    remaining += data;
    var index = remaining.indexOf('\n');
    var last  = 0;
    while (index > -1) {
      var line = remaining.substring(last, index);
      last = index + 1;
      func(line);
      index = remaining.indexOf('\n', last);
    }

    remaining = remaining.substring(last);
  });

  input.on('end', function() {
    if (remaining.length > 0) {
      func(remaining);
    }
  });
}

function func(data) {
  console.log('Line: ' + data);
}

var input = fs.createReadStream('lines.txt');
readLines(input, func);

  注意:这里创办文件流或许会变成buffer编码的主题材料(普通话出现乱码),这里大家能够安装编码来制止,例:

var rs = fs.createReadStream('testdata.md',{encoding:'utf-8',bufferSize:11});

或者
var rs = fs.createReadStream('testdata.md',{bufferSize:11});
rs..setEncoding("utf8");

  近日Node.js仅支持hex(十6进制),utf八,ascii,binary,base6四,ucs二二种编码的转换。对于这几个因为历史遗留难题依然还活着着GBK,GB231二等编码,改措施无能为力。

 

  createWriteStream()

  createWriteStream方法创设三个写入数据流对象,该对象的write方法用于写入数据,end方法用于甘休写入操作。

var out = fs.createWriteStream(fileName, { encoding: "utf8" });
out.write(str);
out.end();

 

事例,将读到的流pipe输到页面上面:

var http = require("http");
var fs = require("fs");


var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain;charset=UTF-8'});
  //将读到的流导到页面上面
  fs.createReadStream('./11.png').pipe(res);
  //不能写其他的res
  //res.write('Hello World\n');
}).listen(8000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8000/');

 

参谋资料:

  

 fs 模块 http://javascript.ruanyifeng.com/nodejs/fs.html

 Node.js学习(拾)—-文件系统fs  

 大熊君大话NodeJS之——FS文件模块 

 nodejs文件操作模块FS(File System)常用函数简明计算 

 node
的文本操作 :

一. 一块方法与异步方法

mode属性可以用于钦命该文件被张开时的读写权限,暗中认可值为06陆。该属性值是用3个4个人数字代表文件或目录全体者、所属组以及其余人的读写权限。一意味着可推行权限,二意味可写权限,放肆味可读权限。
encoding属性能够用来内定以何种字符编码方式将内容写入到文件中。默许的编码情势是“utf八”,也能够改成“base64”、“ascii”恐怕其它的字符编码格局。

fs.readFileSync

fs.readFileSync(filename, [encoding])是 fs.readFile
同步的本子。它承受 的参数和 fs.readFile
一样,而读取到的文件内容会以函数重临值的方式再次来到。假如有错 误爆发,fs
将会抛出极度,你须求使用 try 和 catch 捕捉并管理特别。

注意:与同步I/O 函数分歧,Node.js 中异步函数大多未有重回值。


fs.read(fd,buffer,offset,length,position,callback)
//第一个参数:open方法所所使用的回调函数中返回的文件描述符或openSync方法返回的文件描述符;
第二个参数:英语指定将文件数据读取到哪个缓存区;
第三个参数:整数,用于指定向缓存区中写入数据时的开始位置,以字节为单位
第四个参数:整数,指定从文件中读取的字节数
第五个参数:整数,指定读取文件时开始位置
callback(err,bytesRead,buffer){
  //回调函数代码
}
err:读取文件操作失败时触发的错误对象
bytesRead实际读取的字节数
buffer:被读取的缓存区对象

异步读取文件内容的readFile()方法能够接过四个参数:

与任何模块不同的是,fs 模块中颇具的操作都提供了异步的和
同步的五个版本,举个例子读取文件内容的函数有异步的 fs.readFile() 和1道的
fs.readFileSync()。我们以多少个函数为表示,介绍 fs 常用的效能,并列出 fs
全数函数 的定义和效率。

var fd = fs.openSync(filename,flag,[mode])
fs.writeFile(filename, data, [options], callback);

fs.read

fs.read语法格式如下:

fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])

参数表达:

  • fd: 读取多少并写入 buffer 指向的缓冲区对象。
  • offset: 是buffer 的写入偏移量。
  • length: 是要从文件中读取的字节数。
  • position: 是文件读取的开局地方,倘诺 position 的值为
    null,则会从当下文件指针的职位读取。
  • callback:回调函数字传送递bytesRead 和
    buffer,分别代表读取的字节数和缓冲区指标。

以下是3个施用 fs.open 和 fs.read 的言传身教。

var fs = require('fs'); 
fs.open('content.txt', 'r', function(err, fd) { 
    if(err) { 
        console.error(err); 
        return; 
    } 
    var buf = newBuffer(8); 
    fs.read(fd, buf, 0, 8, null, function(err, bytesRead, buffer) { 
        if(err) { 
            console.error(err); 
            return; 
        } 
        console.log('bytesRead: ' + bytesRead); 
        console.log(buffer); 
    }) 
});

运营结果是:

bytesRead: 8 
<Buffer 54 65 78 74 20 e6 96 87>

相似的话,除非要求,不然不要选择这种格局读取文件,因为它要求你手动管理缓冲区
和文件指针,特别是在您不明了文件大小的时候,那将会是1件很麻烦的政工。

 

var fs = require('fs')
try{
  var data = fs.readFileSync('./text.txt','utf8')
  //在控制台中输出文件内容
  console.log(data) 
}catch(ex){
  console.log('读取文件时发生错误')
}
function(err, data){ //回调函数体}

二、fs 部分API

接纳同步形式展开文件时,使用openSync方法:

var fs = require; //加载fs模块/**使用异步的方式读取文件内容*/fs.readFile('./readFile.txt', function(err, data){ //如果读取文件过程中发生错误则将错误信息输出 if{ console.log; }else{ console.log(data.toString; //使用toString()方法将读取到的内容转换成字符串并输出 }});/**使用同步的方式读取文件内容*/try{ var content = fs.readFileSync('./readFileSync.txt'); console.log(content.toString; //使用toString()方法将读取到的内容转换成字符串并输出}catch{ console.log('读取文件内容时发生错误:' + e);}
Var fs = require('fs')
var data = fs.readFileSysnc('./index.html','utf8')
//等待操作返回结果,然后利用该结果
console.log(data)
flag选项 说明
‘r’ 读取文件。
‘r+’ 读取并写入文件。
‘rs’ 以同步方式读取文件并且忽略本地文件系统缓存。
‘w’ 写入文件,如果文件不存在就创建文件。
‘wx’ 以排他的方式写入文件。
‘w+’ 读取并写入文件。
‘wx+’ 读取并写入文件,是以排他的方式打开文件。
‘a’ 追加写入文件,如果文件不存在就创建文件。
‘ax’ 追加并写入文件,以排他的方式打开文件。
‘a+’ 读取并追加文件,如果文件不存在就创建文件。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图