folder_reader.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. const fs = require('fs').promises;
  2. const path = require('path');
  3. /**
  4. * 读取指定文件夹内的所有子文件夹并返回路径
  5. * @param {string} folderPath - 要读取的文件夹路径
  6. * @returns {Promise<string[]>} 子文件夹路径数组
  7. */
  8. async function getSubdirectories(folderPath) {
  9. try {
  10. // 检查文件夹是否存在
  11. await fs.access(folderPath);
  12. // 读取文件夹内容
  13. const items = await fs.readdir(folderPath, { withFileTypes: true });
  14. // 过滤出子文件夹
  15. const directories = items
  16. .filter(item => item.isDirectory())
  17. .map(item => path.join(folderPath, item.name));
  18. return directories;
  19. } catch (error) {
  20. return [];
  21. }
  22. }
  23. /**
  24. * 获取指定文件夹内的所有文件
  25. * @param {string} folderPath - 要读取的文件夹路径
  26. * @returns {Promise<string[]>} 文件路径数组
  27. */
  28. async function getFilesInDirectory(folderPath) {
  29. try {
  30. // 检查文件夹是否存在
  31. await fs.access(folderPath);
  32. // 读取文件夹内容
  33. const items = await fs.readdir(folderPath, { withFileTypes: true });
  34. // 过滤出文件
  35. const files = items
  36. .filter(item => item.isFile())
  37. .map(item => path.join(folderPath, item.name));
  38. return files;
  39. } catch (error) {
  40. if (error.code === 'ENOENT') {
  41. console.error(`错误: 文件夹不存在 - ${folderPath}`);
  42. return []; // 返回空数组而不是抛出错误
  43. }
  44. throw error;
  45. }
  46. }
  47. // 使用示例
  48. async function main() {
  49. const targetFolder = './example'; // 替换为您的文件夹路径
  50. try {
  51. // 获取子文件夹
  52. console.log('正在读取子文件夹...');
  53. const subdirectories = await getSubdirectories(targetFolder);
  54. console.log('找到的子文件夹:');
  55. subdirectories.forEach(dir => console.log(`- ${dir}`));
  56. // 获取每个子文件夹中的文件
  57. for (const dir of subdirectories) {
  58. console.log(`\n读取文件夹: ${dir}`);
  59. const files = await getFilesInDirectory(dir);
  60. if (files.length === 0) {
  61. console.log(' 此文件夹中没有文件或文件夹不存在');
  62. } else {
  63. console.log(' 找到的文件:');
  64. files.forEach(file => console.log(` - ${file}`));
  65. }
  66. }
  67. // 测试不存在的文件夹
  68. console.log('\n测试不存在的文件夹...');
  69. const nonExistentFiles = await getFilesInDirectory('./non-existent-folder');
  70. console.log(`不存在的文件夹返回了 ${nonExistentFiles.length} 个文件`);
  71. } catch (error) {
  72. console.error('发生错误:', error.message);
  73. }
  74. }
  75. // 如果直接运行此文件,则执行示例
  76. if (require.main === module) {
  77. main();
  78. }
  79. module.exports = { getSubdirectories, getFilesInDirectory };