在JavaScript中,如果你想获取一个文件夹下的所有文件,通常这需要在Node.js环境中进行,因为浏览器环境出于安全考虑不允许直接访问本地文件系统。以下是在Node.js中获取文件夹下所有文件的方法:
fs
模块提供了与标准POSIX函数相兼容的文件系统API。fs
模块提供了异步版本的文件操作方法,这使得I/O操作不会阻塞事件循环,从而提高了应用程序的性能。fs.readdirSync()
,适用于小型项目或者不需要高性能的场景。fs.readdir()
,配合回调函数或Promise使用,适用于大多数需要高性能和响应性的场景。以下是一个使用Node.js异步获取文件夹下所有文件的示例代码:
const fs = require('fs');
const path = require('path');
function getFiles(dir, filesList = []) {
const files = fs.readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
if (fs.statSync(filePath).isDirectory()) {
getFiles(filePath, filesList); // 递归调用
} else {
filesList.push(filePath);
}
}
return filesList;
}
// 使用示例
const directoryPath = './my-directory';
const allFiles = getFiles(directoryPath);
console.log(allFiles);
function getFilesNoRecursion(dir, filesList = [], visited = new Set()) {
if (visited.has(dir)) return filesList;
visited.add(dir);
const files = fs.readdirSync(dir);
for (const file of files) {
const filePath = path.join(dir, file);
if (fs.statSync(filePath).isDirectory()) {
getFilesNoRecursion(filePath, filesList, visited);
} else {
filesList.push(filePath);
}
}
return filesList;
}
// 使用示例
const allFilesNoRecursion = getFilesNoRecursion(directoryPath);
console.log(allFilesNoRecursion);
以上代码展示了如何在Node.js中获取一个文件夹下的所有文件,并且避免了循环引用的问题。
领取专属 10元无门槛券
手把手带您无忧上云