Node.js 文件系统

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

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

var fs = require("fs")

异步和同步

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议大家使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

实例

创建 input.txt 文件,内容如下:

菜鸟教程官网地址:www.runoob.com

文件读取实例

创建 file.js 文件, 代码如下:

var fs = require("fs");

// 异步读取

fs.readFile('input.txt', function (err, data) {

if (err) {

return console.error(err);

}

console.log("异步读取: " + data.toString());

});

// 同步读取

var data = fs.readFileSync('input.txt');

console.log("同步读取: " + data.toString());

console.log("程序执行完毕。");

以上代码执行结果如下:

$ node file.js

同步读取: 菜鸟教程官网地址:www.runoob.com

文件读取实例

程序执行完毕。

异步读取: 菜鸟教程官网地址:www.runoob.com

文件读取实例

接下来,让我们来具体了解下 Node.js 文件系统的方法。

打开文件

语法

以下为在异步模式下打开文件的语法格式:

fs.open(path, flags[, mode], callback)

参数

参数使用说明如下:

path - 文件的路径。

flags - 文件打开的行为。具体值详见下文。

mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。

callback - 回调函数,带有两个参数如:callback(err, fd)。

flags 参数可以是以下值:

Flag描述

r以读取模式打开文件。如果文件不存在抛出异常。

r+以读写模式打开文件。如果文件不存在抛出异常。

rs以同步的方式读取文件。

rs+以同步的方式读取和写入文件。

w以写入模式打开文件,如果文件不存在则创建。

wx类似 'w',但是如果文件路径存在,则文件写入失败。

w+以读写模式打开文件,如果文件不存在则创建。

wx+类似 'w+', 但是如果文件路径存在,则文件读写失败。

a以追加模式打开文件,如果文件不存在则创建。

ax类似 'a', 但是如果文件路径存在,则文件追加失败。

a+以读取追加模式打开文件,如果文件不存在则创建。

ax+类似 'a+', 但是如果文件路径存在,则文件读取追加失败。

实例

接下来我们创建 file.js 文件,并打开 input.txt 文件进行读写,代码如下所示:

var fs = require("fs");

// 异步打开文件

console.log("准备打开文件!");

fs.open('input.txt', 'r+', function(err, fd) {

if (err) {

return console.error(err);

}

console.log("文件打开成功!");

});

以上代码执行结果如下:

$ node file.js

准备打开文件!

文件打开成功!

获取文件信息

语法

以下为通过异步模式获取文件信息的语法格式:

fs.stat(path, callback)

参数

参数使用说明如下:

path - 文件路径。

callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。

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,否则返回 false。

stats.isBlockDevice()如果是块设备返回 true,否则返回 false。

stats.isCharacterDevice()如果是字符设备返回 true,否则返回 false。

stats.isSymbolicLink()如果是软链接返回 true,否则返回 false。

stats.isFIFO()如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。

stats.isSocket()如果是 Socket 返回 true,否则返回 false。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("准备打开文件!");

fs.stat('input.txt', function (err, stats) {

if (err) {

return console.error(err);

}

console.log(stats);

console.log("读取文件信息成功!");

// 检测文件类型

console.log("是否为文件(isFile) ? " + stats.isFile());

console.log("是否为目录(isDirectory) ? " + stats.isDirectory());

});

以上代码执行结果如下:

$ node file.js

准备打开文件!

{ dev: 16777220,

mode: 33188,

nlink: 1,

uid: 501,

gid: 20,

rdev: 0,

blksize: 4096,

ino: 40333161,

size: 61,

blocks: 8,

atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST),

mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST),

ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST) }

读取文件信息成功!

是否为文件(isFile) ? true

是否为目录(isDirectory) ? false

写入文件

语法

以下为异步模式下写入文件的语法格式:

fs.writeFile(file, data[, options], callback)

writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。

参数

参数使用说明如下:

file - 文件名或文件描述符。

data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。

options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'

callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("准备写入文件");

fs.writeFile('input.txt', '我是通 过fs.writeFile 写入文件的内容', function(err) {

if (err) {

return console.error(err);

}

console.log("数据写入成功!");

console.log("--------我是分割线-------------")

console.log("读取写入的数据!");

fs.readFile('input.txt', function (err, data) {

if (err) {

return console.error(err);

}

console.log("异步读取文件数据: " + data.toString());

});

});

以上代码执行结果如下:

$ node file.js

准备写入文件

数据写入成功!

--------我是分割线-------------

读取写入的数据!

异步读取文件数据: 我是通 过fs.writeFile 写入文件的内容

读取文件

语法

以下为异步模式下读取文件的语法格式:

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

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

fd - 通过 fs.open() 方法返回的文件描述符。

buffer - 数据写入的缓冲区。

offset - 缓冲区写入的写入偏移量。

length - 要从文件中读取的字节数。

position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。

callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。

实例

input.txt 文件内容为:

菜鸟教程官网地址:www.runoob.com

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

var buf = new Buffer.alloc(1024);

console.log("准备打开已存在的文件!");

fs.open('input.txt', 'r+', function(err, fd) {

if (err) {

return console.error(err);

}

console.log("文件打开成功!");

console.log("准备读取文件:");

fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){

if (err){

console.log(err);

}

console.log(bytes + " 字节被读取");

// 仅输出读取的字节

if(bytes > 0){

console.log(buf.slice(0, bytes).toString());

}

});

});

以上代码执行结果如下:

$ node file.js

准备打开已存在的文件!

文件打开成功!

准备读取文件:

42 字节被读取

菜鸟教程官网地址:www.runoob.com

关闭文件

语法

以下为异步模式下关闭文件的语法格式:

fs.close(fd, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

fd - 通过 fs.open() 方法返回的文件描述符。

callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

菜鸟教程官网地址:www.runoob.com

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

var buf = new Buffer.alloc(1024);

console.log("准备打开文件!");

fs.open('input.txt', 'r+', function(err, fd) {

if (err) {

return console.error(err);

}

console.log("文件打开成功!");

console.log("准备读取文件!");

fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){

if (err){

console.log(err);

}

// 仅输出读取的字节

if(bytes > 0){

console.log(buf.slice(0, bytes).toString());

}

// 关闭文件

fs.close(fd, function(err){

if (err){

console.log(err);

}

console.log("文件关闭成功");

});

});

});

以上代码执行结果如下:

$ node file.js

准备打开文件!

文件打开成功!

准备读取文件!

菜鸟教程官网地址:www.runoob.com

文件关闭成功

截取文件

语法

以下为异步模式下截取文件的语法格式:

fs.ftruncate(fd, len, callback)

该方法使用了文件描述符来读取文件。

参数

参数使用说明如下:

fd - 通过 fs.open() 方法返回的文件描述符。

len - 文件内容截取的长度。

callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

site:www.runoob.com

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

var buf = new Buffer.alloc(1024);

console.log("准备打开文件!");

fs.open('input.txt', 'r+', function(err, fd) {

if (err) {

return console.error(err);

}

console.log("文件打开成功!");

console.log("截取10字节内的文件内容,超出部分将被去除。");

// 截取文件

fs.ftruncate(fd, 10, function(err){

if (err){

console.log(err);

}

console.log("文件截取成功。");

console.log("读取相同的文件");

fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){

if (err){

console.log(err);

}

// 仅输出读取的字节

if(bytes > 0){

console.log(buf.slice(0, bytes).toString());

}

// 关闭文件

fs.close(fd, function(err){

if (err){

console.log(err);

}

console.log("文件关闭成功!");

});

});

});

});

以上代码执行结果如下:

$ node file.js

准备打开文件!

文件打开成功!

截取10字节内的文件内容,超出部分将被去除。

文件截取成功。

读取相同的文件

site:www.r

文件关闭成功

删除文件

语法

以下为删除文件的语法格式:

fs.unlink(path, callback)

参数

参数使用说明如下:

path - 文件路径。

callback - 回调函数,没有参数。

实例

input.txt 文件内容为:

site:www.runoob.com

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("准备删除文件!");

fs.unlink('input.txt', function(err) {

if (err) {

return console.error(err);

}

console.log("文件删除成功!");

});

以上代码执行结果如下:

$ node file.js

准备删除文件!

文件删除成功!

再去查看 input.txt 文件,发现已经不存在了。

创建目录

语法

以下为创建目录的语法格式:

fs.mkdir(path[, options], callback)

参数

参数使用说明如下:

path - 文件路径。

options 参数可以是:

recursive - 是否以递归的方式创建目录,默认为 false。

mode - 设置目录权限,默认为 0777。

callback - 回调函数,没有参数。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

// tmp 目录必须存在

console.log("创建目录 /tmp/test/");

fs.mkdir("/tmp/test/",function(err){

if (err) {

return console.error(err);

}

console.log("目录创建成功。");

});

以上代码执行结果如下:

$ node file.js

创建目录 /tmp/test/

目录创建成功。

可以添加 recursive: true 参数,不管创建的目录 /tmp 和 /tmp/a 是否存在:

fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {

if (err) throw err;

});

读取目录

语法

以下为读取目录的语法格式:

fs.readdir(path, callback)

参数

参数使用说明如下:

path - 文件路径。

callback - 回调函数,回调函数带有两个参数err, files,err 为错误信息,files 为 目录下的文件数组列表。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

console.log("查看 /tmp 目录");

fs.readdir("/tmp/",function(err, files){

if (err) {

return console.error(err);

}

files.forEach( function (file){

console.log( file );

});

});

以上代码执行结果如下:

$ node file.js

查看 /tmp 目录

input.out

output.out

test

test.txt

删除目录

语法

以下为删除目录的语法格式:

fs.rmdir(path, callback)

参数

参数使用说明如下:

path - 文件路径。

callback - 回调函数,没有参数。

实例

接下来我们创建 file.js 文件,代码如下所示:

var fs = require("fs");

// 执行前创建一个空的 /tmp/test 目录

console.log("准备删除目录 /tmp/test");

fs.rmdir("/tmp/test",function(err){

if (err) {

return console.error(err);

}

console.log("读取 /tmp 目录");

fs.readdir("/tmp/",function(err, files){

if (err) {

return console.error(err);

}

files.forEach( function (file){

console.log( file );

});

});

});

以上代码执行结果如下:

$ node file.js

准备删除目录 /tmp/test

读取 /tmp 目录

……

文件模块方法参考手册

以下为 Node.js 文件模块相同的方法列表:

序号方法 & 描述

1fs.rename(oldPath, newPath, callback)

异步 rename().回调函数没有参数,但可能抛出异常。

2fs.ftruncate(fd, len, callback)

异步 ftruncate().回调函数没有参数,但可能抛出异常。

3fs.ftruncateSync(fd, len)

同步 ftruncate()

4fs.truncate(path, len, callback)

异步 truncate().回调函数没有参数,但可能抛出异常。

5fs.truncateSync(path, len)

同步 truncate()

6fs.chown(path, uid, gid, callback)

异步 chown().回调函数没有参数,但可能抛出异常。

7fs.chownSync(path, uid, gid)

同步 chown()

8fs.fchown(fd, uid, gid, callback)

异步 fchown().回调函数没有参数,但可能抛出异常。

9fs.fchownSync(fd, uid, gid)

同步 fchown()

10fs.lchown(path, uid, gid, callback)

异步 lchown().回调函数没有参数,但可能抛出异常。

11fs.lchownSync(path, uid, gid)

同步 lchown()

12fs.chmod(path, mode, callback)

异步 chmod().回调函数没有参数,但可能抛出异常。

13fs.chmodSync(path, mode)

同步 chmod().

14fs.fchmod(fd, mode, callback)

异步 fchmod().回调函数没有参数,但可能抛出异常。

15fs.fchmodSync(fd, mode)

同步 fchmod().

16fs.lchmod(path, mode, callback)

异步 lchmod().回调函数没有参数,但可能抛出异常。Only available on Mac OS X.

17fs.lchmodSync(path, mode)

同步 lchmod().

18fs.stat(path, callback)

异步 stat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象。

19fs.lstat(path, callback)

异步 lstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象。

20fs.fstat(fd, callback)

异步 fstat(). 回调函数有两个参数 err, stats,stats 是 fs.Stats 对象。

21fs.statSync(path)

同步 stat(). 返回 fs.Stats 的实例。

22fs.lstatSync(path)

同步 lstat(). 返回 fs.Stats 的实例。

23fs.fstatSync(fd)

同步 fstat(). 返回 fs.Stats 的实例。

24fs.link(srcpath, dstpath, callback)

异步 link().回调函数没有参数,但可能抛出异常。

25fs.linkSync(srcpath, dstpath)

同步 link().

26fs.symlink(srcpath, dstpath[, type], callback)

异步 symlink().回调函数没有参数,但可能抛出异常。 type 参数可以设置为 'dir', 'file', 或 'junction' (默认为 'file') 。

27fs.symlinkSync(srcpath, dstpath[, type])

同步 symlink().

28fs.readlink(path, callback)

异步 readlink(). 回调函数有两个参数 err, linkString。

29fs.realpath(path[, cache], callback)

异步 realpath(). 回调函数有两个参数 err, resolvedPath。

30fs.realpathSync(path[, cache])

同步 realpath()。返回绝对路径。

31fs.unlink(path, callback)

异步 unlink().回调函数没有参数,但可能抛出异常。

32fs.unlinkSync(path)

同步 unlink().

33fs.rmdir(path, callback)

异步 rmdir().回调函数没有参数,但可能抛出异常。

34fs.rmdirSync(path)

同步 rmdir().

35fs.mkdir(path[, mode], callback)

S异步 mkdir(2).回调函数没有参数,但可能抛出异常。 访问权限默认为 0777。

36fs.mkdirSync(path[, mode])

同步 mkdir().

37fs.readdir(path, callback)

异步 readdir(3). 读取目录的内容。

38fs.readdirSync(path)

同步 readdir().返回文件数组列表。

39fs.close(fd, callback)

异步 close().回调函数没有参数,但可能抛出异常。

40fs.closeSync(fd)

同步 close().

41fs.open(path, flags[, mode], callback)

异步打开文件。

42fs.openSync(path, flags[, mode])

同步 version of fs.open().

43fs.utimes(path, atime, mtime, callback)

44fs.utimesSync(path, atime, mtime)

修改文件时间戳,文件通过指定的文件路径。

45fs.futimes(fd, atime, mtime, callback)

46fs.futimesSync(fd, atime, mtime)

修改文件时间戳,通过文件描述符指定。

47fs.fsync(fd, callback)

异步 fsync.回调函数没有参数,但可能抛出异常。

48fs.fsyncSync(fd)

同步 fsync.

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

将缓冲区内容写入到通过文件描述符指定的文件。

50fs.write(fd, data[, position[, encoding]], callback)

通过文件描述符 fd 写入文件内容。

51fs.writeSync(fd, buffer, offset, length[, position])

同步版的 fs.write()。

52fs.writeSync(fd, data[, position[, encoding]])

同步版的 fs.write().

53fs.read(fd, buffer, offset, length, position, callback)

通过文件描述符 fd 读取文件内容。

54fs.readSync(fd, buffer, offset, length, position)

同步版的 fs.read.

55fs.readFile(filename[, options], callback)

异步读取文件内容。

56fs.readFileSync(filename[, options])

57fs.writeFile(filename, data[, options], callback)

异步写入文件内容。

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

同步版的 fs.writeFile。

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

异步追加文件内容。

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

The 同步 version of fs.appendFile.

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

查看文件的修改。

62fs.unwatchFile(filename[, listener])

停止查看 filename 的修改。

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

查看 filename 的修改,filename 可以是文件或目录。返回 fs.FSWatcher 对象。

64fs.exists(path, callback)

检测给定的路径是否存在。

65fs.existsSync(path)

同步版的 fs.exists.

66fs.access(path[, mode], callback)

测试指定路径用户权限。

67fs.accessSync(path[, mode])

同步版的 fs.access。

68fs.createReadStream(path[, options])

返回ReadStream 对象。

69fs.createWriteStream(path[, options])

返回 WriteStream 对象。

70fs.symlink(srcpath, dstpath[, type], callback)

异步 symlink().回调函数没有参数,但可能抛出异常。

更多内容,请查看官网文件模块描述:File System。

node mysql菜鸟教程_Node.js 文件系统相关推荐

  1. node mysql 模块 封装_node.js基于工厂方法的mysql模块封装

    有空写完再补说明,手上的事情比较多,以后边做边完善接口. app.js var config = require('./config'); function Query(strquery,option ...

  2. SQL(MySql)菜鸟教程知识

    增 insert into insert into websites (name, url, alexa, county) values ('百度', 'https://www.baidu.com/' ...

  3. node.js mysql 不退出_node.js,node-mysql_使用了node-mysql的代码无法自动停止,node.js,node-mysql - phpStudy...

    使用了node-mysql的代码无法自动停止 // db.js var mysql = require('mysql'); module.exports = function () { var poo ...

  4. nodejs mysql嵌套查询_node.js,_nodejs mysql查询内嵌套修改,node.js - phpStudy

    nodejs mysql查询内嵌套修改 http://www.cnblogs.com/kongxi... 我通过这个案例 把查询 内 再嵌套一个update为什么就报错了呢 应该怎么写 假如我先取出s ...

  5. node输出mysql的数据_node.js+async+mysql 查询数据输出问题,如何分别统计、提取每个sql语句的结果!!...

    展开全部 首先这是一个很简单的问e5a48de588b63231313335323631343130323136353331333335343366题,cnodejs这个论坛node大神算是最多的了, ...

  6. js修改mysql数据库数据_Node.js操作mysql数据库增删改查

    关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...

  7. mysql菜鸟教程update_PHP MySQL Update

    PHP MySQL Update UPDATE 语句用于中修改数据库表中的数据. 更新数据库中的数据 UPDATE 语句用于更新数据库表中已存在的记录. 语法 UPDATE table_name SE ...

  8. node 加密解密模块_NODE.JS加密模块CRYPTO常用方法介绍

    使用require('crypto')调用加密模块. 加密模块需要底层系统提供OpenSSL的支持.它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接. 该模块还提供了一套 ...

  9. mysql 菜鸟教程

    mysql 教程 https://www.runoob.com/mysql/mysql-install.html

  10. php mysql 菜鸟教程_PHP MySQL Select

    PHP MySQL Select SELECT 语句用于从数据库中选取数据. 从数据库表中选取数据 SELECT 语句用于从数据库中选取数据. 语法 SELECT column_name(s) FRO ...

最新文章

  1. 用Micro:bit做浇灌系统
  2. winform 在panel怎么实现锚点定位_高德网络定位之“移动WiFi识别”
  3. 企业网络推广之下的“盒马鲜生”新零售逐渐“破圈”而出
  4. LeetCode Intersection of Two Linked Lists
  5. C#函数式程序设计之惰性列表工具——迭代器
  6. 计算机应用基础教案 马成荣,江苏省职业学校计算机应用基础(马成荣主编)课程两课评比教案:单元教学设计说明...
  7. 收集的48个Shell脚本小技巧
  8. wangeditor html编辑,Vue整合wangEditor富文本编辑器
  9. 数字货币买卖单、价格、数量计算方式浅谈
  10. Dinic最大流(bzoj 2756: [SCOI2012]奇怪的游戏)
  11. Windows安装MySQL 5.7.19及相关问题处理
  12. springboot学习笔记-5 springboot整合shiro
  13. MyBatis学习笔记(一):MAVEN的下载,安装与环境配置和在IDEA中配置maven
  14. rtmp推流工具_EV录屏推流抖音直播教程——墨涩网
  15. 联想服务器怎么使用无线网卡,Lenovo无线装置设置界面无法调节无线网卡
  16. Cryengine渲染引擎剖析(转)
  17. 计算机ip地址错误,网络ip地址怎么修复_ip地址错误的修复步骤-win7之家
  18. window gcc编译器备忘录[Makefile语法说明][make clean指令错误(process_begin: CreateProcess()failed.]
  19. C语言程序对夏令时的处理
  20. 使用tcpdump抓包实例

热门文章

  1. Abbott's Revenge UVA - 816(BFS典型例题)
  2. 1688-API接口安全详解
  3. 消息队列原理及activeMQ基本知识点
  4. frm需要金融计算机吗,FRM考试能用哪些金融计算器?(内含用法功能全解读)
  5. 如何在EXCEL中练习VBA?
  6. elasticsearch安装使用
  7. 智慧校园物联网管理平台建设方案2.0
  8. 工业相机镜头选型教程
  9. html用js连接sql,如何从浏览器中的JavaScript连接到SQL Server数据库?
  10. C语言文件操作(文件读写)