Node核心模块之fs

本文探讨了Node.js中的fs模块,该模块提供了文件I/O操作,包括同步和异步两种方式。通过POSIX函数包装,fs模块支持文件监控、文件流和文件信息查询。异常处理在同步方法中即时抛出,而在异步方法中通过回调函数进行。fs模块的方法命名遵循一定规则,以Sync结尾的为同步方法,其他为异步方法,回调函数通常作为最后一个参数。

Node核心模块之fs

Node.js v6.9.4

Node.js中文件I/O由标准POSIX函数包装后提供,每一个方法都有同步和异步两种形式,使用同步形式时,异常会被立即抛出,可以使用try/catch进行捕获处理,使用异步形式时,完成回调为最后一个参数,第一个参数为异常,并且可以为空.

fs模块主要分为文件监控,文件流,文件信息

fs模块方法介绍,方法结尾为Sync的为同步方法,反之为异步方法,异步方法会有一个回掉函数,且为最后一个参数,很多方法与linux中的文件方法一样

方法中参数介绍

  • fd: 整数
  • file:文件
  • path:路径
  • data:数据
  • callback:回掉函数
方法作用
fs.access(path[, mode], callback)判断用户是否有权限操作给定的目录或者是文件
fs.accessSync(path[, mode])判断用户是否有权限操作给定的目录或者是文件
fs.appendFile(file, data[, options], callback)将数据异步附加到文件
fs.appendFileSync(file, data[, options])将数据异步附加到文件
fs.chmod(path, mode, callback)修改文件夹权限
fs.chownSync(path, uid, gid)修改文件夹权限
fs.chown(path, uid, gid, callback)更改文件夹所有权
fs.close(fd, callback)关闭已打开的文件
fs.closeSync(fd)关闭已打开的文件
fs.createReadStream(path[, options])返回一个新的可读流对象
fs.createWriteStream(path[, options])返回一个新的可写流对象
fs.fchmod(fd, mode, callback)更改文件权限
fs.fchmodSync(fd, mode)更改文件权限
fs.fchown(fd, uid, gid, callback)更改文件所有权
fs.fchownSync(fd, uid, gid)更改文件所有权
fs.fdatasync(fd, callback)刷新数据到磁盘
fs.fdatasyncSync(fd)刷新数据到磁盘
fs.fstat(fd, callback)返回文件的详细信息
fs.fstatSync(fd)返回文件的详细信息
fs.fsync(fd, callback)同步缓存数据到磁盘
fs.fsyncSync(fd)同步缓存数据到磁盘
fs.ftruncate(fd, len, callback)截取文件内容
fs.ftruncateSync(fd, len)截取文件内容
fs.futimes(fd, atime, mtime, callback)更改一个文件所提供的文件描述符引用的文件的时间戳
fs.futimesSync(fd, atime, mtime)更改一个文件所提供的文件描述符引用的文件的时间戳
fs.lchmod(path, mode, callback)更改文件权限(不解析符号链接)
fs.lchmodSync(path, mode)更改文件权限(不解析符号链接)
fs.lchown(path, uid, gid, callback)更改文件所有权(不解析符号链接)
fs.lchownSync(path, uid, gid)更改文件所有权(不解析符号链接)
fs.link(existingPath, newPath, callback)创建硬链接(只能在本券中)
fs.linkSync(existingPath, newPath)创建硬链接(只能在本券中)
fs.lstat(path, callback)获取文件信息(不解析符号链接)
fs.lstatSync(path)获取文件信息(不解析符号链接)
fs.mkdir(path[, mode], callback)创建文件目录,如果目录已存在,将抛出异常
fs.mkdirSync(path[, mode])创建文件目录,如果目录已存在,将抛出异常
fs.mkdtemp(prefix[, options], callback)创建临时目录
fs.mkdtempSync(prefix[, options])创建临时目录
fs.open(path, flags[, mode], callback)打开文件
fs.openSync(path, flags[, mode])打开文件
fs.read(fd, buffer, offset, length, position, callback)读取文件内容
fs.readSync(fd, buffer, offset, length, position)读取文件内容,返回字节数
fs.readdir(path[, options], callback)读取文件目录
fs.readdirSync(path[, options])读取文件目录
fs.readFile(file[, options], callback)读取文件
fs.readFileSync(file[, options])读取文件
fs.readlink(path[, options], callback)读取软连接信息
fs.readlinkSync(path[, options])读取软连接信息
fs.realpath(path[, options], callback)获取真实路径
fs.realpathSync(path[, options])获取真实路径
fs.rename(oldPath, newPath, callback)重命名路径
fs.renameSync(oldPath, newPath)重命名路径
fs.rmdir(path, callback)删除文件目录
fs.stat(path, callback)删除文件目录
fs.rmdirSync(path)获取文件信息
fs.statSync(path)获取文件信息
fs.symlink(target, path[, type], callback)创建符号链接
fs.symlinkSync(target, path[, type])创建符号链接
fs.truncate(path, len, callback)文件内容截取操作
fs.truncateSync(path, len)文件内容截取操作
fs.unlink(path, callback)删除文件操作
fs.unlinkSync(path)删除文件操作
fs.unwatchFile(filename[, listener])解除文件监控
fs.utimes(path, atime, mtime, callback)修改文件时间戳
fs.utimesSync(path, atime, mtime)修改文件时间戳
fs.watch(filename[, options][, listener])监控文件
fs.watchFile(filename[, options], listener)监控文件
fs.write(fd, buffer, offset, length[, position], callback)向文件写数据
fs.writeSync(fd, buffer, offset, length[, position])向文件写数据
fs.write(fd, data[, position[, encoding]], callback)想文件写数据
fs.writeSync(fd, data[, position[, encoding]])想文件写数据
fs.writeFile(file, data[, options], callback)想文件写数据
fs.writeFileSync(file, data[, options])想文件写数据
Node.js核心模块是随 Node.js 一起提供的一组内置模块,这些模块提供了处理文件系统、网络、路径操作、操作系统信息等服务器端功能的能力。核心模块通常不需要额外安装,可以直接通过 `require()` 函数引入使用。以下是 Node.js 中一些常见的核心模块: - **`fs` 模块** 用于与文件系统进行交互,例如读取和写入文件、创建目录、删除文件等。 ```javascript const fs = require('fs'); fs.readFile('example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); }); ``` - **`http` 模块** 用于创建 HTTP 服务器和客户端,支持构建 Web 服务器和发送 HTTP 请求。 ```javascript const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }); server.listen(3000); ``` - **`path` 模块** 提供了处理和转换文件路径的工具函数,例如拼接路径、获取文件名或扩展名等。 ```javascript const path = require('path'); console.log(path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')); // 输出: '/foo/bar/baz/asdf' ``` - **`os` 模块** 提供了与操作系统交互的功能,可以获取 CPU、内存、网络接口等信息。 ```javascript const os = require('os'); console.log(os.cpus()); // 输出当前机器的 CPU 信息 [^1] ``` - **`process` 模块** 允许对当前运行的进程进行操作,例如获取命令行参数、环境变量、退出状态码等。 ```javascript console.log(process.argv); // 输出命令行参数 ``` - **`util` 模块** 提供了一些常用的工具函数,例如 `util.promisify` 可用于将回调函数转换为返回 Promise 的函数。 ```javascript const util = require('util'); const fs = require('fs'); const readFileAsync = util.promisify(fs.readFile); readFileAsync('example.txt', 'utf8') .then(data => console.log(data)) .catch(err => console.error(err)); ``` - **`events` 模块** 提供了事件驱动编程的支持,核心是 `EventEmitter` 类,允许对象发布和监听事件。 ```javascript const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () => { console.log('An event occurred!'); }); myEmitter.emit('event'); ``` - **`stream` 模块** 提供了处理流式数据的功能,支持可读流、可写流、双工流和转换流等。 ```javascript const fs = require('fs'); const readStream = fs.createReadStream('example.txt'); readStream.on('data', chunk => { console.log(`Received ${chunk.length} bytes of data.`); }); ``` - **`buffer` 模块** 用于处理二进制数据,提供了 `Buffer` 类来创建和操作原始内存缓冲区。 ```javascript const buf = Buffer.from('Hello, world!', 'utf8'); console.log(buf); // 输出 <Buffer 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 21> ``` - **`child_process` 模块** 提供了创建子进程的功能,可以执行外部命令并与其进行通信。 ```javascript const { exec } = require('child_process'); exec('ls -l', (error, stdout, stderr) => { if (error) { console.error(`exec error: ${error}`); return; } console.log(`stdout: ${stdout}`); console.log(`stderr: ${stderr}`); }); ``` - **`cluster` 模块** 支持创建共享服务器端口的子进程,常用于多核系统的负载均衡。 ```javascript const cluster = require('cluster'); const http = require('http'); if (cluster.isMaster) { cluster.fork(); } else { http.createServer((req, res) => { res.writeHead(200); res.end('Hello World\n'); }).listen(8000); } ``` - **`crypto` 模块** 提供了加密和哈希算法的功能,支持生成安全的随机数、加密数据、创建签名等。 ```javascript const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update('Hello, world!'); console.log(hash.digest('hex')); // 输出 SHA-256 哈希值 ``` 这些核心模块构成了 Node.js 的基础功能,开发者可以通过它们快速构建高效、可扩展的应用程序。需要注意的是,在 Node.js 中定义的变量并不是全局变量,因为所有用户代码都属于当前模块,而模块本身不是最外层上下文 [^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值