文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。您可以通过调用require('fs')来获取该模块。文件系统模块中的所有方法均有异步和同步版本。

文件系统模块中的异步方法需要一个完成时的回调函数作为最后一个传入形参。 回调函数的构成由您调用的异步方法所决定,通常情况下回调函数的第一个形参为返回的错误信息。 如果异步操作执行正确并返回,该错误形参则为null或者undefined

如果您使用的是同步版本的操作方法,则一旦出现错误,会以通常的抛出错误的形式返回错误。 你可以用trycatch等语句来拦截错误并使程序继续进行。

这里是一个异步版本的例子:

fs.unlink('/tmp/hello', function (err) {
if (err) throw err;
console.log('successfully deleted /tmp/hello');
});

这是同步版本的例子:

fs.unlinkSync('/tmp/hello')
console.log('successfully deleted /tmp/hello');
当使用异步版本时不能保证执行顺序,因此下面这个例子很容易出错
fs.rename('/tmp/hello', '/tmp/world', function (err) {
if (err) throw err;
console.log('renamed complete');
});
fs.stat('/tmp/world', function (err, stats) {
if (err) throw err;
console.log('stats: ' + JSON.stringify(stats));
});

fs.stat有可能在fs.rename前执行.要等到正确的执行顺序应该用下面的方法:

fs.rename('/tmp/hello', '/tmp/world', function (err) {
if (err) throw err;
fs.stat('/tmp/world', function (err, stats) {
if (err) throw err;
console.log('stats: ' + JSON.stringify(stats));
});
});

在繁重的任务中,强烈推荐使用这些函数的异步版本.同步版本会阻塞进程,直到完成处理,也就是说会暂停所有的连接.

可以使用文件名的相对路径, 但是记住这个路径是相对于process.cwd()的.

大部分的文件系统(fs)函数可以忽略回调函数(callback)这个参数.如果忽略它,将会由一个默认回调函数(callback)来重新抛出(rethrow)错误.要获得原调用点的堆栈跟踪(trace)信息,需要在环境变量里设置NODE_DEBUG.

$ env NODE_DEBUG=fs node script.js
fs.js:66
throw err;
^
Error: EISDIR, read
at rethrow (fs.js:61:21)
at maybeCallback (fs.js:79:42)
at Object.fs.readFile (fs.js:153:18)
at bad (/path/to/script.js:2:17)
at Object.<anonymous> (/path/to/script.js:5:1)
<etc.>

fs.rename(oldPath, newPath, callback)

重命名某个文件,异步版本的rename函数(2).完成时的回调函数(callback)只接受一个参数:可能出现的异常信息.

fs.renameSync(oldPath, newPath)

同步版本的rename(2).

fs.ftruncate(fd, len, callback)

截断某个文件 异步版本的ftruncate(2). 完成时的回调函数(callback)只接受一个参数:可能出现的异常信息.

fs.ftruncateSync(fd, len)

同步版本的ftruncate(2).

fs.truncate(path, len, callback)

异步版本的truncate(2). 完成时的回调函数(callback)只接受一个参数:可能出现的异常信息

fs.chmod(path, mode, [callback]) 和 fs.chmodSync(path, mode)

修改文件权限,主要说下第二个参数,实际上是:-rwxrwxrwx,三个一组,r:4、w:2、x:1、-: 0。可以 参考 http://zh.wikipedia.org/zh/Chmod

fs.stat(path, [callback]),fs.lstat(path, [callback]),fs.fstat(fd, [callback]) 和 fs.statSync(path)、fs.lstatSync(path)、fs.fstatSync(fd)

读取文件元信息,回调函数将返回两个参数(err, stats),其中stats是fs.Stats的一个对象.者的区别在于:
第一个是返回文件的信息,参数是路径
第二个是和第一个一样,当路径是文件链接时,返回这个链接文件的信息
第三个是传递参数为fd文件描述符

fs.link(srcpath, dstpath, [callback])、fs.linkSync(srcpath, dstpath) 和 fs.symlink(linkdata, path, [callback])、fs.symlinkSync(linkdata, path)

建立文件链接,除非回调函数执行过程出现了异常,否则不会传递任何参数。link和symlink的区别是: link 创建的是hard link 所谓硬链接 symlink创建的是symbolic link 所谓符号链接 硬链接就是备份,软连接就是快捷方式

fs.readlink(path, [callback])、fs.realpath(path, [callback]) 、fs.unlink(path, [callback])和 fs.readlinkSync(path)、fs.realpathSync(path)、fs.unlinkSync(path)

异步调用readlink,回调函数返回两个参数(err,resolvedPath),resolvedPath为解析后的文件路径。 这3个函数分别是: 1、readlink:读取链接源地址 2、realpath:根据相对地址转换为绝对地址 3、unlink:删除某一个文件链接

fs.rmdir(path, [callback])、fs.mkdir(path, mode, [callback])、fs.readdir(path, [callback]) 和 fs.rmdirSync(path)、fs.mkdirSync(path, mode)、fs.readdirSync(path)

三个命令分别是: rmdir:删除目录 mkdir:建立目录 readdir:读取目录中的内容。回调函数接受两个参数(err, files),其中files参数是保存了目录中所有文件名的数组('.'和'..'除外)。

fs.close(fd, [callback])、fs.closeSync(fd) 和 fs.open(path, flags, [mode], [callback])、fs.openSync(path, flags, [mode])

fs.open与 C 语言标准库中的 fopen 函数类似。它接受两个必选参数,path 为文件的路径, flags 可以是以下值。  r :以读取模式打开文件。
 r+ :以读写模式打开文件。
 w :以写入模式打开文件,如果文件不存在则创建。
 w+ :以读写模式打开文件,如果文件不存在则创建。
 a :以追加模式打开文件,如果文件不存在则创建。
 a+ :以读取追加模式打开文件,如果文件不存在则创建。
mode 参数用于创建文件时给文件指定权限,默认是 0666。回调函数将会传递一个文 件描述符 fd。

fs.utimes(path, atime, mtime, callback)、fs.utimesSync(path, atime, mtime) 和 fs.futimes(path, atime, mtime, callback)、fs.futimesSync(path, atime, mtime)

更改文件时间戳,2者区别在于,utimes更改此文件时间戳,如果此文件指向一个符号链接,futimes更改符号链接的时间戳。

fs.write(fd, buffer, offset, length, position, [callback]) 和 fs.writeSync(fd, buffer, offset, length, position) 和 fs.writeSync(fd, str, position, encoding='utf8')

fs.write将buffer缓冲器内容写入fd文件描述符,
offset和length决定了将缓冲器中的哪部分写入文件。
position指明将数据写入文件从头部算起的偏移位置,若position为null,数据将从当前位置开始写入
回调函数接受两个参数(err, written),其中written标识有多少字节的数据已经写入
第三个是基于字符串的fs.write()的同步版本,返回写入数据的字节数。
注意:写完后要关闭它

fs.read(fd, buffer, offset, length, position, [callback]) 、fs.readSync(fd, buffer, offset, length, position)、fs.readSync(fd, length, position, encoding) 和 fs.readFile(filename, [encoding], [callback])、fs.readFileSync(filename, [encoding])

前3个是读取文件描述符和BUFFER的方法,后2个是读取文件全部内容,比如输出html模版,或者css文件等。
一般来说,除非必要,否则不要使用前3个是读取文件方式读取文件,因为它要求你手动管理缓冲区 和文件指针,尤其是在你不知道文件大小的时候,这将会是一件很麻烦的事情。
fs.read回调函数接受两个参数,(err, bytesRead),bytesRead返回读取到的字节数。
fs.readFile的回调函数将传入两个参数(err, data),其中data为文件内容,如果没有设置编码,那么将返回原始内容格式的缓冲器。

fs.writeFile(filename, data, encoding='utf8', [callback]),fs.writeFileSync(filename, data, encoding='utf8')

对应文件写功能

fs.watchFile(filename, [options], listener),fs.unwatchFile(filename)

fs.watchFile监听指定文件filename的变化,回调函数listener将在每次该文件被访问时被调用.
第二个参数[options]是可选项,如果指定了options参数,它应该是一个包含如下内容的对象:名为persistent的布尔值,和名为interval单位为毫秒的轮询时间间隔,默认值为{ persistent: true, interval: 0 }。 listener监听器将获得两个参数(curr, prev),分别标识当前的状态对象和改变前的状态对象,这些状态对象为fs.Stat的实例。
fs.unwatchFile停止监听文件filename的变化。

fs.watch(filename, [options], [listener])

观察指定路径的改变,filename 路径可以是文件或者目录。改函数返回的对象是 fs.FSWatcher

第二个参数是可选的. 如果 options 选项被提供那么它应当是一个只包含成员persistent得对象,persistent为boolean类型。persistent指定了进程是否“只要文件被监视就继续执行”缺省值为 { persistent: true }.

监听器的回调函数得到两个参数 (event, filename)。其中 event 是 'rename'(重命名)或者 'change'(改变),而 filename 则是触发事件的文件名。(fs.watch 不是完全跨平台的,且在某些情况下不可用。)

fs.exists(path, callback) 和 fs.existsSync(path)

检查指定路径的文件或者目录是否存在。接着通过 callback 传入的参数指明存在 (true) 或者不存在 (false)。示例:

fs.Stats

fs.stat()和 fs.lstat()方法返回的对象为此类型

  • stats.isFile()

  • stats.isDirectory()
  • stats.isBlockDevice()
  • stats.isCharacterDevice()
  • stats.isSymbolicLink() (only valid with fs.lstat()) stats.isSymbolicLink() (仅对fs.lstat()有效)
  • stats.isFIFO()
  • stats.isSocket()

对于一个普通文件使用 util.inspect(stats) 将会返回一个类似如下输出的字符串:

    { dev: 2049,
    ino: 305352,
    mode: 16877,
    nlink: 12,
    uid: 1000,
    gid: 1000,
    rdev: 0,
    size: 4096,
    blksize: 4096,
    blocks: 8,
    atime: '2009-06-29T11:11:55Z',
    mtime: '2009-06-29T11:11:40Z',
    ctime: '2009-06-29T11:11:40Z' }

fs.createReadStream(path, [options])

返回一个新的可读流对象options是包含如下默认值的对象:
{ flags: 'r', encoding: null, fd: null, mode: 0666, bufferSize: 64 * 1024 }
如果不想读取文件的全部内容,可以在options参数中设置start和end属性值以读取文件中指定范围的内容。start和end包含在范围中(闭集合),取值从0开始。这两个参数需要同时设置。

fs.createWriteStream(path, [options])

options参数是包含如下默认值的对象:
{ flags: 'w', encoding: null, mode: 0666 }

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

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

  • filename {String}

  • data {String | Buffer}
  • options {Object}
    • encoding {String | Null} default = 'utf8'

    • mode {Number} default = 438 (aka 0666 in Octal)
    • flag {String} default = 'a'
  • callback {Function}

异步的将数据添加到一个文件的尾部,如果文件不存在,会创建一个新的文件。 data 可以是一个string,也可以是原生buffer。

事件

事件: 'open'
  • fd {整形} ReadStream 所使用的文件描述符。

当文件的 ReadStream 被创建时触发。

事件: 'change'
  • event {字符串} fs 改变的类型

  • filename {字符串} 改变的文件名 (if relevant/available)

当正在观察的目录或文件发生变动时触发

事件: 'error'
  • error {Error 对象}

当产生错误时触发

File-nodejs的更多相关文章

  1. nodejs那些事

    安装篇: 1.从http://nodejs.cn/上下载了nodejs-v4.4.4版安装包(已存入360云盘) 2.在windows下双击——下一步——下一步安装即可(注意:安装路径就默认安装到C: ...

  2. atom插件安装引发的nodejs和npm安装血案

    最近在写前端网页,学习就要从高大上的地方开始,于是我打算装一个atom编辑器. 本来就是由github客户端的,再装个atom也算是配套了吧,其实本白也是蛮费心思的,技术不怎么地,什么神器都再努力地使 ...

  3. VS.Net 2015 Update3 学习(1) 支持Webpack

    让vs.net 编译的时候自动执行webpack 首先 管理员模式下打开 “Developer Command Prompt for VS2015", 是管理员模式啊! 然后进入 cd c: ...

  4. Node NPM 的常用配置

    1,修改 npm 下载模块的 保存地址 <1>  进入 cmd 运行, 如下命令 npm config set prefix  "C:\Program File\NodeJs\p ...

  5. hexo搭建个人主页托管于github

    之前学习了 如何利用Github免费搭建个人主页,今天利用hexo来快速生成个人网页托管于github上. hexo系列教程:(一)hexo介绍 什么是hexo hexo是一个基于Node.js的静态 ...

  6. GitLab : Omnibus Installer

    转自:https://www.ibm.com/developerworks/community/blogs/2280dc86-a78a-441b-89d7-5b4c41595852/entry/Git ...

  7. Cannot install NodeJs: /usr/bin/env: node: No such file or directory

    安装doxmate时,doxmate地址是:https://github.com/JacksonTian/doxmatenpm install doxmate -g 安装完后把错误:Cannot in ...

  8. nodejs -- fs模块 ---> readFile 函数 1) fs.readFile(filename, "binary", function(error, file) 2) response.write(file, "binary");

    一:代码: 1.1 入口文件: index.js var server = require('./server'); var router = require("./router" ...

  9. npm安装socket.io时报错的解决方法(npm WARN enoent ENOENT: no such file or directory, open '/usr/local/nodejs/bin/package.json')

    执行 npm install socket.io安装时报错: [root@WEB node_modules]# npm install socket.ionpm WARN enoent ENOENT: ...

  10. 【应用服务 App Service】NodeJS +Egg 发布到App Service时遇见 [ERR_SYSTEM_ERROR]: A system error occurred:uv_os_get_passwd returned ENOENT(no such file or directory)

    问题情形 本地NodeJS应用使用Egg脚手架构建,本地运行测试完全没有问题,发布后App Service后不能运行.通过登录到kudu后(https://<your web site>. ...

随机推荐

  1. 用Eclipse编写运行Java程序

    1.选择一个空的文件夹,作为workspace工作空间,用来存放你以后用eclipse写的Java程序.(一个workspace可以放很多很多project项目) 2.新建java项目:File-&g ...

  2. C# 任意类型数据转JSON格式(转)

    HOT SUMMER 每天都是不一样,积极的去感受生活 C# 任意类型数据转JSON格式 /// <summary> /// List转成json /// </summary> ...

  3. Flex 国际化(flex Localize)

    先说编译到主程序中去的方法: 1.创建资源文件夹 譬如可以在src文件夹下创建Locale文件夹,然后在此文件夹再次创建每个地区的资源文件夹,譬如de_DE,zh_CN. 然后分别创建后缀名为.pro ...

  4. 简单易懂的命名空间及use的使用

    最近一段时间在研究php框架,一直想的什么时候才能开发出自己的框架,当然这是为了提升自己的编程水平,同时能把平时学的零散的东西糅合在一块熟练应用.但是开发一个框架根本不知道如何做起,先开发什么,虽然p ...

  5. [HDOJ2818]Building Block(带权并查集,路径压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2818 题意:有N个块,每次有两个操作: M x y表示把x所在的那一堆全部移到y所在的那一堆的下方. ...

  6. Codeforces_GYM Flight Boarding Optimization

    (ACM ICPC 2013–2014, NEERC, Northern Subregional Contest) Flight Boarding OptimizationInput file: fl ...

  7. 函数fsp_get_space_header

    /**********************************************************************//** Gets a pointer to the sp ...

  8. basicjava

    .完数 . 第一个完全数是6,它有约数1.2.3.6,除去它本身6外,其余3个数相加,1+2+3=6.第二个完全数是28,它有约数1.2.4.7.14. 28,除去它本身28外,其余5个数相加,1+2 ...

  9. Qt之进程间通信(IPC)

    简述 进程间通信,就是在不同进程之间传播或交换信息.那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区.但是,系统空间却是& ...

  10. LA 5009 (三分法求极值) Error Curves

    给出的曲线要么是开口向上的抛物线要么是直线,但所定义的F(x)的图形一定是下凸的. 注意一点就是求得是极小值,而不是横坐标,样例也很容易误导人. #include <cstdio> #in ...