购物网站运营人力资源培训
node js访问文件夹
多年来,JavaScript对文件系统的访问非常有限。 当然,JavaScript在其生命的大部分时间内都存在于浏览器中。 对于Web脚本语言,访问文件系统被视为主要的安全风险。 前端开发人员被迫使用Cookie, Web存储 , ActiveX ,Flash和其他技术。 HTML5带来了文件系统API ,但在Chrome之外仍基本上不受支持 。 随着Node.js的出现,JavaScript开始成为一种合法的服务器端语言。 在服务器上,文件系统访问是经常发生的事情,因此对API的考虑就更少了。
文件系统模块
默认情况下,Node.js安装附带文件系统模块fs
。 在大多数情况下, fs
只是为标准文件操作提供了一个包装器。 以下示例使用文件系统模块将文件的内容读取到内存中。 首先,在第1行上导入文件系统模块。在第3行上, exists()
函数确定文件“ foo.txt”是否存在。 exists()
回调函数采用布尔参数,该布尔参数指定文件是否存在。 从那里, stat()
函数用于确定文件的长度(以字节为单位)。 此信息很重要,因此我们知道要读取多少数据。
接下来,我们使用open()
打开文件。 r
参数表示文件正在打开以供读取。 open()
回调函数提供了文件描述符 fd
用于访问新打开的文件。 在回调函数内部,我们定义了一个缓冲区来保存文件的内容。 请注意,缓冲区已初始化为文件大小,该大小存储在stats.size
。 接下来,使用read()
函数将文件读入缓冲区。 缓冲区现在包含从文件读取的原始数据。 为了显示数据,我们必须首先将其转换为UTF-8编码的字符串。 最后,文件内容被打印到控制台,并且文件被关闭。
var fs = require("fs");
var fileName = "foo.txt";
fs.exists(fileName, function(exists) {
if (exists) {
fs.stat(fileName, function(error, stats) {
fs.open(fileName, "r", function(error, fd) {
var buffer = new Buffer(stats.size);
fs.read(fd, buffer, 0, buffer.length, null, function(error, bytesRead, buffer) {
var data = buffer.toString("utf8", 0, buffer.length);
console.log(data);
fs.close(fd);
});
});
});
}
});
同步功能
查看文档时,您可能会注意到许多功能都以Sync
结尾。 它们代表同步功能,这在Node.js的回调驱动世界中很少见。 为方便起见,提供了同步功能。 例如,用Node.js编写的简单批处理脚本可能无需担心性能最大化。 同步功能对于在程序初始化期间加载某些文件也很有用。 但是,在活动的服务器应用程序中,同步功能可能会因停止Node的单执行线程而严重影响性能。
下面的示例说明如何将文件同步和异步读入内存。 至少可以说,我们之前的读取文件的示例有些复杂。 这次,我们的示例使用readFile()
函数在单个函数调用中读取整个文件。 readFile()
的前两个参数是文件名及其编码。 遵循Node.js约定,最后一个参数是回调函数。 回调函数的参数提供错误信息和文件内容。
var fs = require("fs");
fs.readFile("foo.txt", "utf8", function(error, data) {
console.log(data);
});
以下示例使用readFileSync()
同步执行相同的任务。 同步代码更具可读性,但是不提供与异步代码相同的可伸缩性。
var fs = require("fs");
var data = fs.readFileSync("foo.txt", "utf8");
console.log(data);
观看文件
文件系统模块允许程序监视对特定文件的修改。 这在诸如nodemon之类的程序中非常有用,该程序在修改源代码后会自动重新启动程序。 以下示例监视名为“ foo.txt”的文件。 修改文件后,事件类型将打印到控制台。
var fs = require("fs");
var fileName = "foo.txt";
fs.watch(fileName, {
persistent: true
}, function(event, filename) {
console.log(event + " event occurred on " + filename);
});
watch()
函数采用三个参数。 第一个参数是要监视的文件的名称。 第二个参数是可选的,并提供配置设置。 如果存在,则第二个参数应该是一个包含名为persistent
的布尔值的对象。 如果为true
,则persistent
阻止程序终止。 如果省略第二个参数,则默认为true
。 最后一个参数是在修改目标文件时触发的回调。 回调传递事件的类型(更改,重命名等)和文件名。 值得注意的是watch()
依赖于底层操作系统,并且可能不适用于每个系统。 如果watch()
不可用,则较慢的watchFile()
可用作备份。
结论
本文从很高的层次介绍了Node.js文件系统模块。 该模块包含50多种不同的功能,对于一篇文章来说显然太多了。 例如,本文仅涉及读取文件,而完全忽略了写入文件。 我鼓励您浏览模块文档以更深入地了解。 请记住,同步功能应格外小心!
翻译自: https://www.sitepoint.com/accessing-the-file-system-in-node-js/
node js访问文件夹