- 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
模块都是一个强大的工具。