美文网首页
API - fs 文件操作

API - fs 文件操作

作者: 冯走心 | 来源:发表于2016-03-02 11:03 被阅读1227次

Node.js 提供一组类似UNIX(POSIX)标准的文件操作API,Node.js中操作文件的模块是fs(File System)模块,文件系统模块中的方法均有异步和同步版本。利用fs模块,可以查询文件的统计信息、打开关闭文件、读写文件等。
本文介绍一些fs模块的常用功能。相关功能有:

[查询文件信息]
[打开文件]
[读取文件]
[写入文件]
[关闭文件]
[确定文件是否存在]
[文件删除]
[目录相关操作]

1.查询文件信息:fs.stat(path, callback)

fs.stat()方法用于查询文件信息,可以用于查询文件的大小、创建时间、权限等相关信息。fs.stat()是异步方法,还有一个同步方法fs.statSync(path)
。示例如下:
var fs = require('fs');fs.stat('/Users/liuht/code/itbilu/demo/path.js', function (err, stats) { console.log(stats);})
返回结果如下:
{ dev: 16777220, mode: 33188, nlink: 1, uid: 501, gid: 20, rdev: 0, blksize: 4096, ino: 78808297, size: 244, blocks: 8, atime: Wed May 27 2015 18:24:43 GMT+0800 (CST), mtime: Wed May 27 2015 18:26:25 GMT+0800 (CST), ctime: Wed May 27 2015 18:26:25 GMT+0800 (CST) }
fs.stat(path)
执行后,会将stats
类的实例返回给其回调函数。可以通过stats
类中的提供方法判断文件的相关属性。例如判断是否为文件:
var fs = require('fs');fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) { console.log(stats.isFile()); //true})
stats
类中的方法有:
stats.isFile() 如果是标准文件,返回true。是目录、套接字、符号连接、或设备等返回false
stats. isDirectory() 如果是目录,返回true
stats. isBlockDevice() 如果是块设备,返回true,大多数情况下类UNIX系统的块设备都位于/dev目录下
stats. isCharacterDevice() 如果是字符设备,返回true
stats. isSymbolicLink() 如果是符号连接,返回true。(fs.lstat()方法返回的stats对象才有此方法)
stats.isFIFO() 如果是FIFO,返回true。FIFO是UNIX中的一种特殊类型的命令管道
stats. isSocket() 如果是UNIX套接字,返回true

2.打开文件:fs.open(path, flags[, mode], callback)

操作文件前需要选对文件进行打开操作。fs.open()方法用于打开文件,打开文件后,文件描述符fs
会调用open方法的回调函数,然后就可以通过文件描述符fs
对文件进行读写等操作了。同步版的方法名为fs.openSync(path, flags[, mode])
。示例如下:
var fs = require('fs');fs.open('/Users/liuht/code/itbilu/demo/path.js', 'r', function (err, fd) { // 可以在这里通过文件描述fs对文件进行操作})
fs.open()方法第一个参数是文件路径。每二个参数是标志位,标志位表示文件的打开模式。标志含义与UNIX中fopen的标识位相同:
r 打开文本文件进行读取,数据流位置在文件起始处
r+ 打开文本文件进行读写,数据流位置在文件起始处
w 如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件起始处
w+ 打开文件进行读写,如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件起始处
a 打开文件写入数据,如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件结尾处,此后的写操作都将数据追加到文件后面
a+ 打开文件进行文件读写,如果文件存在,将其清零,不存在创建写入文件。数据流位置在文件结尾处,此后的写操作都将数据追加到文件后面

3.读取文件信息:fs.read(fd, buffer, offset, length, position, callback)

文件打开后,就可以使用fs.read()方法进行读取,读取前需要创建一个用于保存文件数据的缓冲区。缓冲区数据最终会被传递到回调函数中。示例如下:
var fs = require('fs');fs.open('/Users/liuht/code/itbilu/demo/fs.js', 'r', function (err, fd) { var readBuffer = new Buffer(1024), offset = 0, len = readBuffer.length, filePostion = 100; fs.read(fd, readBuffer, offset, len, filePostion, function(err, readByte){ console.log('读取数据总数:'+readByte+' bytes' ); // ==>读取数据总数:239 bytes console.log(readBuffer.slice(0, readByte)); //数据已被填充到readBuffer中 })})
上面的代码,文件打开后,会从第100个字节开始,读取其后的1024个字节的数据。读取完成后,fs.read()
会回调最后一个回调方法,然后就可以可以处理读取到的的缓冲的数据了。fs.openSync()
是fs.open()方法的同步版本。
fs
模块还提供了fs.readFile(filename[, options], callback)方法用于读取文件内容。

4.写入文件:fs.write(fd, buffer, offset, length[, position], callback)

文件打开后,可以通过 fs.write()方法传递一个数据缓冲区,以向打开的文件中写入数据。示例如下:
var fs = require('fs');fs.open('./fs.txt', 'a', function (err, fd) { var writeBuffer = new Buffer('这是要写入的字符串'), offset = 0, len = writeBuffer.length, filePostion = null; fs.write(fd, writeBuffer, offset, len, filePostion, function(err, readByte){ console.log('写数据总数:'+readByte+' bytes' ); // ==>写数据总数:27 bytes })})
fs.writeSync()
是fs.write()
方法的同步版本。
fs
模块还提供了fs.writeFile(filename, data[, options], callback)方法可以方便的将字符串或Buffer数据写入文件。
提示:fs.read()和fs.write()方法执行后不要使用提供给其缓冲区Buffer,方法执行后缓冲区将处于这两个方法的控制下,只要回调函数执行后才能重新使用。

5.关闭文件:fs.close(fd, callback)

在前面读写文件的操作中,Node进程退出后就会关闭文件。在实际使用中,不能依靠进程退出来关闭文件,因此必须跟踪那些已打开的文件描述,在使用完毕后使用fs.close()方法关闭文件。示例如下:
var fs = require('fs');fs.open('./fs.txt', 'a', function (err, fd) { //对文件一些操作 //操作完成后,关闭文件 fs.close(fd, function(err){ })})

6.确定文件是否存在:fs.exists(path, callback)

有时在文件进行操作之前,需要判断文件或路径是否存在。fs.exists()用于判断文件是否存在,fs.existsSync()是其同步版本
。示例如下:
var fs = require('fs');fs.exists('/etc/passwd', function (exists) { util.debug(exists ? "文件存在" : "文件不存在啊!");});
注意:Node V4.0以后这个方法已经不再支持,请使用fs.stat()或fs.access()

7.文件删除:fs.unlink(path, callback)

不在使用的文件可以用fs.unlink()方法进行删除,删除前应使用fs.exists()方法检查文件是否存在,fs.unlinkSync()是其同步版本
。示例如下:
var fs = require('fs');var path = require('path');var file = path.join(__dirname, './fs.txt');if(fs.existsSync(file)){ fs.unlink(file, function(err){ if(err) { console.log(err); } }) }

8.目录操作:fs.readdir(path, callback)
、fs.mkdir(path[, mode], callback)
、fs.rmdir(path, callback)

fs模块对目录的操作主要有:fs.readdir(),读取文件夹下所有文件名。fs.mkdir(),创建目录。fs.rmdir(),删除目录。fs.mkdir()创建目录时有第二个可选参数用于指定目录权限,不指定是权限为0777。这三个方法都sync同步方法。示例如下:
var fs = require('fs');var path = require('path')//读取目录夹内容fs.readdir('./', function(err, files){ if(err)console.log(err); console.log(files);}) //目录创建fs.mkdir(path.join(__dirname, './test'), function(err){ if(err) console.log(err);})//目录删除fs.rmdir(path.join(__dirname, './test'), function(err){ if(err) console.log(err);})

相关文章

  • API - fs 文件操作

    Node.js 提供一组类似UNIX(POSIX)标准的文件操作API,Node.js中操作文件的模块是fs(Fi...

  • Node.js fs 模块

    实验简介 fs模块用于对系统文件及目录进行读写操作参考链接:http://nodejs.org/api/fs.ht...

  • 文件操作

    fs模块提供了所有文件操作的API 读取文件参数一:文件地址参数二:回调函数 function: (error,...

  • node中fs模块

    fs模块是对于文件,和文件夹进行操作 关于flag 通过设置读写文件API的flag属性,我们能控制我们操作文件的...

  • Node-核心模块(fs、path)

    一、核心模块fs 1、文件读取 使用 Node 中 提供的 文件操作API,读取指定 文件中的文本内容 Node ...

  • 深入Nodejs模块fs - 文件系统操作

    node 的fs文档密密麻麻的 api 非常多,毕竟全面支持对文件系统的操作。文档组织的很好,操作基本分为文件操作...

  • Node.js入门(五) : Nodejs模块API介绍

    本文主要介绍一下几个模块的API:文件操作fs path、Buffer缓冲区、Stream文件流、promise与...

  • 06、node.js 文件系统

    Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法...

  • node.js中的fs 模块

    Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法...

  • nodeJs学习笔记(3) ---文件系统

    Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法...

网友评论

      本文标题:API - fs 文件操作

      本文链接:https://www.haomeiwen.com/subject/fxjnkttx.html