- NodeJs的介绍及使用
- Node.js核心模块概览
- NodeJs-Assertion Testing
- NodeJs-Asynchronous Context Tracking
- NodeJs-async_hooks
- NodeJs-Buffer
- Node.js- C++ Addons
- Node.js-C++ Addons Node-API
- NodeJs-C++ Embedder API
- Node.js-Child Process
- NodeJs-Cluster
- Node.js-命令行选项
- Node.js-Console
- Node.js-Corepack
- Node.js-Crypto
- NodeJs-Debugger
- NodeJs-Diagnostics Channel
- NodeJs-DNS
- NodeJs-Domain
- NodeJs-Errors
- NodeJs-Events
- NodeJs-File system(一)
- NodeJs-File system(二)
- NodeJs-File system(三)
- NodeJs-Globals
- NodeJs-HTTP
- NodeJs-HTTP/2
- NodeJs-HTTPS
- NodeJs-Inspector
- NodeJs-Internationalization
- NodeJs-Modules CommonJS modules、ECMAScript modules、node:module、Packages、TypeScript
- NodeJs-Net
- NodeJs-OS
- NodeJs-path
- NodeJs-Performance Hooks
- NodeJs-Permissions
- NodeJs-process
- NodeJs-punycode
- Node.js-querystring
- NodeJs-Readline
- NodeJs-REPL
- NodeJs-Report
- NodeJs-Single Executable Applications
- NodeJs-SQLite
- NodeJs-Stream
- NodeJs-String Decoder
- NodeJs-Test runner
- NodeJs-Timers
- NodeJs-TLS/SSL
- NodeJs-Trace events
- NodeJs-TTY
- NodeJs-UDP/datagram
- NodeJs-URL
- NodeJs-Utilities
- NodeJs-V8
- NodeJs-VM
- NodeJs-WASI
- NodeJs-Web Crypto API
- NodeJs Web Streams API
- NodeJs Worker threads
- NodeJs-Zlib
- NodeJs-Single Executable Applications
NodeJs-File system(一)
class File systemNode.js 的文件系统(File System, fs)模块允许你与文件和目录进行交互。fs 模块提供了很多方法来操作文件和目录,包括读取、写入、删除、重命名文件和目录等。fs 模块中的方法有同步和异步版本。异步方法更常用,因为它们不会阻塞事件循环。
1. 引入 fs 模块
在使用 fs 模块之前,需要先引入它:
const fs = require('fs');
2. 常用方法
以下是 Node.js fs 模块中的一些常用方法及其详细说明:
2.1 文件操作
-
fs.readFile(path[, options], callback)异步读取文件的内容。
path: 字符串或 Buffer,文件的路径。options: 对象(可选),可以指定编码(如'utf8')和标志(如'r'读取模式)。callback: 回调函数,格式为(err, data),data是读取的文件内容。
示例:
fs.readFile('example.txt', 'utf8', (err, data) => { if (err) throw err; console.log(data); }); -
fs.readFileSync(path[, options])同步读取文件的内容。
path: 字符串或 Buffer,文件的路径。options: 对象(可选),可以指定编码(如'utf8')和标志(如'r'读取模式)。
示例:
try { const data = fs.readFileSync('example.txt', 'utf8'); console.log(data); } catch (err) { console.error(err); } -
fs.writeFile(file, data[, options], callback)异步写入文件。如果文件已存在,则覆盖该文件。
file: 字符串或 Buffer,文件的路径。data: 字符串或 Buffer,要写入的数据。options: 对象(可选),可以指定编码(如'utf8')和标志(如'w'写入模式)。callback: 回调函数,格式为(err)。
示例:
fs.writeFile('example.txt', 'Hello, world!', (err) => { if (err) throw err; console.log('File has been saved!'); }); -
fs.writeFileSync(file, data[, options])同步写入文件。如果文件已存在,则覆盖该文件。
file: 字符串或 Buffer,文件的路径。data: 字符串或 Buffer,要写入的数据。options: 对象(可选),可以指定编码(如'utf8')和标志(如'w'写入模式)。
示例:
try { fs.writeFileSync('example.txt', 'Hello, world!'); console.log('File has been saved!'); } catch (err) { console.error(err); } -
fs.appendFile(file, data[, options], callback)异步追加数据到文件。如果文件不存在,则创建文件。
file: 字符串或 Buffer,文件的路径。data: 字符串或 Buffer,要追加的数据。options: 对象(可选),可以指定编码(如'utf8')和标志(如'a'追加模式)。callback: 回调函数,格式为(err)。
示例:
fs.appendFile('example.txt', 'Hello again!', (err) => { if (err) throw err; console.log('Data has been appended!'); }); -
fs.appendFileSync(file, data[, options])同步追加数据到文件。如果文件不存在,则创建文件。
file: 字符串或 Buffer,文件的路径。data: 字符串或 Buffer,要追加的数据。options: 对象(可选),可以指定编码(如'utf8')和标志(如'a'追加模式)。
示例:
try { fs.appendFileSync('example.txt', 'Hello again!'); console.log('Data has been appended!'); } catch (err) { console.error(err); } -
fs.rename(oldPath, newPath, callback)异步重命名文件或目录。
oldPath: 字符串或 Buffer,当前文件或目录的路径。newPath: 字符串或 Buffer,新文件或目录的路径。callback: 回调函数,格式为(err)。
示例:
fs.rename('oldName.txt', 'newName.txt', (err) => { if (err) throw err; console.log('File has been renamed!'); }); -
fs.renameSync(oldPath, newPath)同步重命名文件或目录。
oldPath: 字符串或 Buffer,当前文件或目录的路径。newPath: 字符串或 Buffer,新文件或目录的路径。
示例:
try { fs.renameSync('oldName.txt', 'newName.txt'); console.log('File has been renamed!'); } catch (err) { console.error(err); } -
fs.unlink(path, callback)异步删除文件。
path: 字符串或 Buffer,文件的路径。callback: 回调函数,格式为(err)。
示例:
fs.unlink('example.txt', (err) => { if (err) throw err; console.log('File has been deleted!'); }); -
fs.unlinkSync(path)同步删除文件。
path: 字符串或 Buffer,文件的路径。
示例:
try { fs.unlinkSync('example.txt'); console.log('File has been deleted!'); } catch (err) { console.error(err); } -
fs.stat(path, callback)异步获取文件的状态信息。
path: 字符串或 Buffer,文件的路径。callback: 回调函数,格式为(err, stats)。
stats是一个fs.Stats对象,提供文件的信息(如大小、创建时间等)。示例:
fs.stat('example.txt', (err, stats) => { if (err) throw err; console.log(stats); }); -
fs.statSync(path)同步获取文件的状态信息。
path: 字符串或 Buffer,文件的路径。
示例:
try { const stats = fs.statSync('example.txt'); console.log(stats); } catch (err) { console.error(err); }
2.2 目录操作
-
fs.mkdir(path[, options], callback)异步创建目录。
path: 字符串或 Buffer,新目录的路径。options: 对象(可选),可以指定recursive(递归创建)和mode(权限)等选项。callback: 回调函数,格式为(err)。
示例:
fs.mkdir('newDir', { recursive: true }, (err) => { if (err) throw err; console.log('Directory created!'); }); -
fs.mkdirSync(path[, options])同步创建目录。
path: 字符串或 Buffer,新目录的路径。options: 对象(可选),可以指定recursive(递归创建)和mode(权限)等选项。
示例:
try { fs.mkdirSync('newDir', { recursive: true }); console.log('Directory created!'); } catch (err) { console.error(err); } -
fs.rmdir(path[, options], callback)异步删除目录。要删除的目录必须为空。
path: 字符串或 Buffer,目录的路径。options: 对象(可选),可以指定recursive(递归删除)等选项(从 Node.js
12.10.0 开始)。
callback: 回调函数,格式为(err)。
示例:
fs.rmdir('newDir', (err) => {
if (err) throw err;
console.log('Directory removed!');
});
-
fs.rmdirSync(path[, options])同步删除目录。要删除的目录必须为空。
path: 字符串或 Buffer,目录的路径。options: 对象(可选),可以指定recursive(递归删除)等选项(从 Node.js 12.10.0 开始)。
示例:
try { fs.rmdirSync('newDir'); console.log('Directory removed!'); } catch (err) { console.error(err); } -
fs.readdir(path[, options], callback)异步读取目录的内容。
path: 字符串或 Buffer,目录的路径。options: 对象(可选),可以指定encoding(编码)等选项。callback: 回调函数,格式为(err, files),files是目录中内容的数组。
示例:
fs.readdir('.', (err, files) => { if (err) throw err; console.log(files); }); -
fs.readdirSync(path[, options])同步读取目录的内容。
path: 字符串或 Buffer,目录的路径。options: 对象(可选),可以指定encoding(编码)等选项。
示例:
try { const files = fs.readdirSync('.'); console.log(files); } catch (err) { console.error(err); }
2.3 其他操作
-
fs.copyFile(src, dest[, mode], callback)异步复制文件。
src: 字符串或 Buffer,源文件的路径。dest: 字符串或 Buffer,目标文件的路径。mode: 整数(可选),指定文件复制的行为,可以是fs.constants.COPYFILE_EXCL或fs.constants.COPYFILE_FICLONE。callback: 回调函数,格式为(err)。
示例:
fs.copyFile('source.txt', 'destination.txt', (err) => { if (err) throw err; console.log('File copied!'); }); -
fs.copyFileSync(src, dest[, mode])同步复制文件。
src: 字符串或 Buffer,源文件的路径。dest: 字符串或 Buffer,目标文件的路径。mode: 整数(可选),指定文件复制的行为,可以是fs.constants.COPYFILE_EXCL或fs.constants.COPYFILE_FICLONE。
示例:
try { fs.copyFileSync('source.txt', 'destination.txt'); console.log('File copied!'); } catch (err) { console.error(err); } -
fs.watch(filename[, options], listener)监视文件或目录的变化。
filename: 字符串或 Buffer,要监视的文件或目录的路径。options: 对象(可选),可以指定persistent(是否持续监视)、recursive(是否递归监视子目录)等选项。listener: 回调函数,格式为(eventType, filename),当文件或目录变化时被调用。
示例:
fs.watch('example.txt', (eventType, filename) => { console.log(`File ${filename} changed with event type ${eventType}`); });
3. 小结
Node.js 的 fs 模块提供了丰富的文件系统操作方法,包括文件读写、目录操作和文件监视等。了解这些方法的同步和异步版本以及各自的使用场景,可以帮助你在 Node.js 应用程序中高效地进行文件和目录操作。无论是简单的文件读写,还是复杂的文件系统监视,fs 模块都是一个强大的工具。