在这一章中,我们将探讨如何使用 Node.js 来进行目录操作。目录操作包括创建目录、读取目录内容、删除目录以及修改目录属性等。这些功能对于文件管理非常有用,特别是在处理大量文件时。
文件系统模块概述
Node.js 提供了一个名为 fs 的核心模块,用于与文件系统进行交互。除了文件操作外,该模块也提供了目录操作的 API。首先,我们需要导入这个模块:
const fs = require('fs');创建目录
使用 fs.mkdir() 方法可以创建新的目录。如果需要递归创建目录(即父目录不存在时自动创建),可以使用 fs.mkdirSync() 或者异步版本的 fs.promises.mkdir() 方法。
异步创建目录
fs.mkdir('newFolder', (err) => {
if (err) throw err;
console.log('Directory created successfully!');
});同步创建目录
try {
fs.mkdirSync('newFolder');
console.log('Directory created successfully!');
} catch (err) {
console.error(err);
}递归创建目录
为了递归地创建目录,可以使用 fs.mkdir() 方法的 recursive 选项或使用 fs.promises.mkdir() 方法:
// www.javascriptcn.com code example
// 使用 options 参数
fs.mkdir('path/to/newFolder', { recursive: true }, (err) => {
if (err) throw err;
console.log('Directory created successfully!');
});
// 使用 promises
async function createRecursiveDir() {
try {
await fs.promises.mkdir('path/to/newFolder', { recursive: true });
console.log('Directory created successfully!');
} catch (err) {
console.error(err);
}
}
createRecursiveDir();读取目录内容
要读取一个目录中的所有文件和子目录,可以使用 fs.readdir() 方法。此方法会返回一个包含目录下所有文件和子目录名的数组。
异步读取目录
fs.readdir('targetFolder', (err, files) => {
if (err) throw err;
for (const file of files) {
console.log(file);
}
});同步读取目录
try {
const files = fs.readdirSync('targetFolder');
for (const file of files) {
console.log(file);
}
} catch (err) {
console.error(err);
}删除目录
要删除一个空目录,可以使用 fs.rmdir() 方法。若要删除非空目录,需要先递归删除其下的所有内容。
删除空目录
fs.rmdir('emptyFolder', (err) => {
if (err) throw err;
console.log('Directory removed successfully!');
});删除非空目录
对于非空目录,我们通常需要先列出并删除目录内的所有内容,然后再删除目录本身。这里提供一个简单的示例函数来实现这一点:
// www.javascriptcn.com code example
async function deleteDirectory(path) {
const files = await fs.promises.readdir(path);
for (const file of files) {
const curPath = path + '/' + file;
const stats = await fs.promises.stat(curPath);
if (stats.isDirectory()) {
// Recursively delete subdirectories
await deleteDirectory(curPath);
} else {
// Delete files
await fs.promises.unlink(curPath);
}
}
// Remove the directory itself
await fs.promises.rmdir(path);
}
deleteDirectory('nonEmptyFolder')
.then(() => console.log('Directory deleted successfully!'))
.catch((err) => console.error(err));修改目录属性
Node.js 的 fs 模块提供了多种方法来修改文件系统的属性,包括目录。例如,我们可以改变目录的权限:
更改目录权限
fs.chmod('directoryPath', '0777', (err) => {
if (err) throw err;
console.log('Permissions changed successfully!');
});更改目录的所有者和组
Node.js 的 fs 模块并不直接支持更改文件或目录的所有者和组。这通常需要特定的操作系统命令,如在 Linux 系统上使用 chown 命令。
以上就是关于 Node.js 目录操作的基础介绍。通过这些方法,你可以有效地管理和操作你的文件系统,从而提高开发效率。