记录工作中的点点滴滴

nodejs之文件操作(fs模块)

Nodejs学习之文件操作

文件操作

NodeJS 提供一组类似 UNIX(POSIX)标准的文件操作API。

1.Node 导入文件系统模块

Node 导入文件系统模块(fs)语法如下所示:

1
var fs = require("fs")

2.异步和同步

NodeJS能够操作文件。小至文件查找,大至代码编译。
NodeJS文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

3.文件拷贝

NodeJS提供了基本的文件操作API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件拷贝程序练手。与copy命令类似,我们的程序需要能接受源文件路径与目标文件路径两个参数。
在编写拷贝程序之前,先来看几个函数的用法。

writeFileSync: 将文件内容写入目标路径

1
fs.writeFileSync(file, data[, options])

解释:

1.file为目标路径
2.data为文件内容

readFileSync: 读取文件

1
fs.readFileSync(file[, options])

解释:

1.src为要读取的文件
好,这两个重要的函数理清楚了之后,我们来编写一个文件拷贝程序。

process:进程,它是一个全局变量

1
2
3
process#
The process object is a global that provides information about, and control over, the current Node.js process. As a global, it is always available to Node.js applications without using require().

解释:
process是一个全局变量,获取当前nodejs进程的信息。可以不用require(…)这样的语法而直接使用。

process脚本

新建一个名为process.js的文件,内容如下:

1
console.log(process.argv)

执行process.js:

1
$ node process.js /Users/phping/Webserver/htdocs/nodejs/example.js

输出:

1
2
3
[ '/usr/local/Cellar/node/5.1.0/bin/node',
'/Users/liuyongfei/Webserver/htdocs/nodejs/7days/process.js',
'/Users/liuyongfei/Webserver/htdocs/nodejs/example.js' ]

解释:

process.argv可以获得命令行参数,是一个数组。
其中 argv[0]是NodeJS执行程序的绝对路径
argv[1]为该脚本的绝对路径
argv[2]为输入的参数

好了,几个重要的函数已经解释得差不多了,下面来看一个简单的拷贝脚本:

Demo:文件拷贝little-file-copy.js

1
2
3
4
5
6
7
8
var fs = require('fs')
function copy(src,dst) {
fs.writeFileSync(dst,fs.readFileSync(src))
}
function main(argv) {
copy(argv[0],argv[1])
}
main(process.argv.slice(2))

执行脚本little-file-copy.js,并未该脚本传递两个参数,第一个参数是源文件(要拷贝的文件),第二个参数为目标文件(将源文件拷贝到哪里)

1
$ node little-file-copy.js /Users/phping/Webserver/htdocs/nodejs/example.js /Users/phping/Webserver/htdocs/nodejs/7days/test/test.js

拷贝脚本解释:
  1. process.argv.slice(2)的结果如下:

    1
    2
    [ '/Users/liuyongfei/Webserver/htdocs/nodejs/example.js',
    '/Users/liuyongfei/Webserver/htdocs/nodejs/7days/test/test.js' ]
  2. 这两个元素分别作为copy的第一个和第二个参数,即:

    1
    2
    src等于'/Users/liuyongfei/Webserver/htdocs/nodejs/example.js'
    dst等于'/Users/liuyongfei/Webserver/htdocs/nodejs/7days/test/test.js'
  3. fs.readFileSync(src)读取源文件,并返回文件的内容

  4. 将文件内容写入目标路径 fs.writeFileSync(‘/Users/liuyongfei/Webserver/htdocs/nodejs/7days/test/test.js’ ,fs.readFileSync(‘/Users/liuyongfei/Webserver/htdocs/nodejs/example.js’))

然后检查一下test目录下面的确生成一个了个test.js文件,且与example.js文件一样,则证明该脚本的拷贝功能成功。