查看“Node.js:文件系统”的源代码
←
Node.js:文件系统
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Node.js教程]] == 关于 == Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示: '''<syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs") </syntaxhighlight>''' === 异步和同步 === Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本。 : 例如读取文件内容的函数有异步的 '''fs.readFile()''' 和同步的 '''fs.readFileSync()'''。 异步的方法函数最后一个参数为'''回调函数''',回调函数的第一个参数包含了错误信息('''error''')。 建议使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。 示例: # 创建 input.txt 文件,内容如下: #: <syntaxhighlight lang="JavaScript" highlight=""> 菜鸟教程官网地址:www.runoob.com 文件读取实例 </syntaxhighlight> # 创建 file.js 文件, 代码如下: #: <syntaxhighlight lang="JavaScript" highlight=""> 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("程序执行完毕。"); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 同步读取: 菜鸟教程官网地址:www.runoob.com 文件读取实例 程序执行完毕。 异步读取: 菜鸟教程官网地址:www.runoob.com 文件读取实例 </syntaxhighlight> == 用法 == 以下为在'''异步'''模式下的语法格式。 === 打开文件:fs.open === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.open(path, flags[, mode], callback) </syntaxhighlight>''' 参数: * path - 文件的路径。 * flags - 文件打开的行为。 * mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。 * callback - 回调函数,带有两个参数如:callback(err, fd)。 flags 参数可以是以下值: {| class="wikitable" ! Flag !! 描述 |- | r || 以'''读取'''模式打开文件。如果文件不存在抛出异常。 |- | r+ || 以'''读写'''模式打开文件。如果文件不存在抛出异常。 |- | rs || 以'''同步'''的方式读取文件。 |- | rs+ || 以同步的方式读取和写入文件。 |- | w || 以'''写入'''模式打开文件,如果文件不存在则创建。 |- | wx || 类似 'w',但是如果文件路径存在,则文件写入失败。 |- | w+ || 以'''读写'''模式打开文件,如果文件不存在则创建。 |- | wx+ || 类似 'w+', 但是如果文件路径存在,则文件读写失败。 |- | a || 以'''追加'''模式打开文件,如果文件不存在则创建。 |- | ax || 类似 'a', 但是如果文件路径存在,则文件追加失败。 |- | a+ || 以'''读取追加'''模式打开文件,如果文件不存在则创建。 |- | ax+ || 类似 'a+', 但是如果文件路径存在,则文件读取追加失败。 |} 示例: # 创建 file.js 文件,并打开 input.txt 文件进行读写: #: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); // 异步打开文件 console.log("准备打开文件!"); fs.open('input.txt', 'r+', function(err, fd) { if (err) { return console.error(err); } console.log("文件打开成功!"); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备打开文件! 文件打开成功! </syntaxhighlight> === 获取文件信息:fs.stat === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.stat(path, callback) </syntaxhighlight>''' 参数: * path - 文件路径。 * callback - 回调函数,带有两个参数如:(err, stats), stats 是 fs.Stats 对象。 fs.stat(path) 执行后,会将 '''stats类''' 的实例返回给其回调函数: {| class="wikitable" ! 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 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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()); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ 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 </syntaxhighlight> === 读取文件:fs.read === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.read(fd, buffer, offset, length, position, callback) </syntaxhighlight>''' 参数: * fd - 通过 fs.open() 方法返回的文件描述符。 * buffer - 数据写入的缓冲区。 * offset - 缓冲区写入的写入偏移量。 * length - 要从文件中读取的字节数。 * position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。 * callback - 回调函数,有三个参数:err, bytesRead, buffer;其中 err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。 示例: # input.txt 文件内容为: #: <syntaxhighlight lang="JavaScript" highlight=""> 菜鸟教程官网地址:www.runoob.com </syntaxhighlight> # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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()); } }); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备打开已存在的文件! 文件打开成功! 准备读取文件: 42 字节被读取 菜鸟教程官网地址:www.runoob.com </syntaxhighlight> === 写入文件:fs.writeFile === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.writeFile(file, data[, options], callback) </syntaxhighlight>''' * writeFile 直接打开文件默认是 '''w''' 模式,所以如果文件存在,该方法写入的内容会'''覆盖'''旧的文件内容。 参数: * file - 文件名或文件描述符。 * data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。 * options - 该参数是一个对象,包含 {encoding, mode, flag}。 ** 默认编码为 utf8,模式为 0666,flag 为 'w' * callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。 示例: # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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()); }); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备写入文件 数据写入成功! --------我是分割线------------- 读取写入的数据! 异步读取文件数据: 我是通过 fs.writeFile 写入文件的内容 </syntaxhighlight> === 关闭文件:fs.close === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.close(fd, callback) </syntaxhighlight>''' 参数: * fd - 通过 fs.open() 方法返回的文件描述符。 * callback - 回调函数,没有参数(仅有参数 err)。 示例: # input.txt 文件内容为: #: <syntaxhighlight lang="JavaScript" highlight=""> 菜鸟教程官网地址:www.runoob.com </syntaxhighlight> # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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("文件关闭成功"); }); }); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备打开文件! 文件打开成功! 准备读取文件! 菜鸟教程官网地址:www.runoob.com 文件关闭成功 </syntaxhighlight> === 截取文件:fs.ftruncate === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.ftruncate(fd, len, callback) </syntaxhighlight>''' * 该方法使用了文件描述符来读取文件; * 截取:将源文件截取覆盖到源文件; 参数: * fd - 通过 fs.open() 方法返回的文件描述符。 * len - 文件内容截取的长度。 * callback - 回调函数,没有参数。 示例: # input.txt 文件内容为: #: <syntaxhighlight lang="JavaScript" highlight=""> site:www.runoob.com </syntaxhighlight> # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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("文件关闭成功!"); }); }); }); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备打开文件! 文件打开成功! 截取10字节内的文件内容,超出部分将被去除。 文件截取成功。 读取相同的文件 site:www.r 文件关闭成功 </syntaxhighlight> === 删除文件:fs.unlink === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.unlink(path, callback) </syntaxhighlight>''' 参数: * path - 文件路径。 * callback - 回调函数,没有参数。 示例: # input.txt 文件内容为: #: <syntaxhighlight lang="JavaScript" highlight=""> site:www.runoob.com </syntaxhighlight> # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); console.log("准备删除文件!"); fs.unlink('input.txt', function(err) { if (err) { return console.error(err); } console.log("文件删除成功!"); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备删除文件! 文件删除成功! </syntaxhighlight> === 创建目录:fs.mkdir === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.mkdir(path[, options], callback) </syntaxhighlight>''' 参数: * path - 文件路径。 * options 参数可以是: ** recursive - 是否以递归的方式创建目录,默认为 false。 ** mode - 设置目录权限,默认为 0777。 * callback - 回调函数,没有参数。 示例: # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> var fs = require("fs"); // tmp 目录必须存在 console.log("创建目录 /tmp/test/"); fs.mkdir("/tmp/test/",function(err){ if (err) { return console.error(err); } console.log("目录创建成功。"); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 创建目录 /tmp/test/ 目录创建成功。 </syntaxhighlight> * 可以添加 recursive: true 参数,不管创建的目录 /tmp 和 /tmp/a 是否存在: *: <syntaxhighlight lang="JavaScript" highlight=""> fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => { if (err) throw err; }); </syntaxhighlight> === 读取目录:fs.readdir === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.readdir(path, callback) </syntaxhighlight>''' 参数: * path - 文件路径。 * callback - 回调函数,回调函数带有两个参数: ** err 为错误信息, ** files 为目录下的文件数组列表。 示例: # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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 ); }); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 查看 /tmp 目录 input.out output.out test test.txt </syntaxhighlight> === 删除目录:fs.rmdir === 语法: '''<syntaxhighlight lang="JavaScript" highlight=""> fs.rmdir(path, callback) </syntaxhighlight>''' 参数: * path - 文件路径。 * callback - 回调函数,没有参数。 示例: # 创建 file.js 文件: #: <syntaxhighlight lang="JavaScript" highlight=""> 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 ); }); }); }); </syntaxhighlight> # 以上代码执行结果如下: #: <syntaxhighlight lang="JavaScript" highlight=""> $ node file.js 准备删除目录 /tmp/test 读取 /tmp 目录 …… </syntaxhighlight> == 方法手册 == Node.js 文件模块相同的方法列表:见“'''[https://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback https://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback]'''”。
返回至“
Node.js:文件系统
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息