JSFiddle - React, Tailwind, and code Playground
JavaScript
// FileFinder.js
const fs = require('fs');
const util = require('util');
const path = require('path');
module.exports = FileFinder;
function FileFinder() {
this.ext = null;
this.folder = null;
this.findedFiles = [];
}
FileFinder.prototype.findAllByExt = function (ext, folder) {
let mp3Files;
this.ext = ext;
this.folder = folder;
this.getAllFromFolder(folder)
.then(data => {
mp3Files = data.filter(item => {
return this.isMp3(folder, item);
});
this.findedFiles.push(...mp3Files);
data.forEach(item => {
fs.stat(path.join(folder, item), (err, stat) => {
if (err) throw err;
if (stat.isDirectory()) {
this.findAllByExt(this.ext, path.join(folder, item));
}
});
});
})
.catch(err => {
throw err
});
};
FileFinder.prototype.getAllFromFolder = function (folder) {
return new Promise((resolve, reject) => {
fs.readdir(folder, (err, files) => {
if (err) reject(err);
resolve(files);
});
});
};
FileFinder.prototype.isMp3 = function (folder, fileName) {
return (path.parse(path.join(folder, fileName)).ext === `.${this.ext}`);
};
// main.js
const FileFinder = require('./FileFinder');
let mp3Finder = new FileFinder();
mp3Finder.findAllByExt('xls', '/home/user/downloads');
setImmediate(() => {
console.log(mp3Finder);
});