Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Hakemiston Tarkastustyökalu | Konsolisovellusten Rakentaminen Node.js:llä
Backend-kehitys Node.js:llä ja Express.js:llä

bookHakemiston Tarkastustyökalu

Tässä luvussa saat haasteen: kehitä edistynyt konsolisovellus nimeltä DirInspect Pro. Tämän sovelluksen avulla voit analysoida minkä tahansa hakemiston perusteellisesti ja saada hyödyllistä tilastotietoa sen tiedostoista ja alihakemistoista.

🏆 Haaste odottaa

Kuvittele tilanne, jossa sinun täytyy navigoida tärkeiden tiedostojen ja datan täyttämässä kansiolabyrintissä. DirInspect Pro on apunasi tällä matkalla, tarjoten kattavaa tietoa hakemiston rakenteesta ja sisällöstä.

🚀 Lopputuloksena syntyvä sovellus

Valmistaudu hyödyntämään DirInspect Pron ominaisuuksia. Sovellus tarjoaa sinulle keskeistä tietoa, kuten

  • Kohteiden kokonaismäärä;
  • Kaikkien kohteiden yhteenlaskettu koko;
  • Suurimman tiedoston nimi ja koko;
  • Yksittäisten tiedostojen nimet ja koot yksityiskohtaisesti.

Kaksi polkua valittavana

Edessäsi on kaksi vaihtoehtoa.

  • Ensimmäinen on tarttua haasteeseen suoraan, kehittäen taitojasi ilman ohjeita;
  • Toinen on seurata hyödyllistä opasta, joka takaa onnistumisesi.

Valitsitpa kumman tahansa, edessäsi on palkitseva matka, jonka lopputuloksena syntyy kiehtova ja toimiva konsolisovellus.

Pääsuunnitelma

  • 👉 Vaihe 1: Tuo tarvittavat moduulit;
  • 👉 Vaihe 2: Määrittele getStats-funktio;
  • 👉 Vaihe 3: Määrittele analyzeFile-funktio;
  • 👉 Vaihe 4: Määrittele analyzeDirectory-funktio;
  • 👉 Vaihe 5: Määrittele main-funktio ja kutsu sitä;
  • 🎉 Yhteenveto;
  • 🏁 Koko sovelluksen koodi.

Vaihe 1: Tuo tarvittavat moduulit

Tämän tehtävän aloittamiseen tarvitaan oikeat työkalut. Aloita tuomalla kaksi keskeistä moduulia: fs.promises tiedostojärjestelmän asynkroniseen hallintaan ja path tiedostopolkujen käsittelyyn tehokkaasti.

const fs = require("fs").promises;
const path = require("path");

Vaihe 2: Määrittele getStats-funktio

Asynkroninen funktio getStats ottaa tiedoston tai hakemiston polun argumenttina ja yrittää hakea sen tilastotiedot käyttäen fs.stat-metodia.

  • Onnistuneessa tapauksessa palauttaa tilastotiedot;
  • Virheen sattuessa kirjaa virheilmoituksen ja palauttaa null.
async function getStats(filePath) {
  try {
    const stats = await fs.stat(filePath);
    return stats;
  } catch (err) {
    console.error("Error getting stats:", err.message);
    return null;
  }
}

Vaihe 3: Määrittele analyzeFile-funktio

analyzeFile-funktio käyttää getStats-funktiota tiedoston tilastotietojen hakemiseen. Jos tilastotiedot ovat saatavilla (ei null), funktio palauttaa olion, joka sisältää tiedoston nimen (haettu path.basename-metodilla) ja sen koon.

async function analyzeFile(filePath) {
  const stats = await getStats(filePath);
  if (!stats) return null;

  return {
    name: path.basename(filePath),
    size: stats.size,
  };
}

Vaihe 4: analyzeDirectory-funktion määrittely

analyzeDirectory-funktio ottaa hakemistopolun argumenttina ja analysoi kattavasti sen sisällön.

  • Se aloittaa lukemalla hakemiston kohteet käyttäen fs.readdir ja käy sitten läpi jokaisen kohteen;
  • Jokaiselle kohteelle muodostetaan täydellinen polku käyttäen path.join ja haetaan sen tilastot getStats-funktion avulla;
  • Jos stats osoittaa, että kohde on tiedosto, päivitetään tiedostoon liittyvät tilastot;
  • Jos kohde on alihakemisto, funktiota analyzeDirectory kutsutaan rekursiivisesti analysoimaan sen sisältö ja tilastot yhdistetään.
async function analyzeDirectory(directoryPath) {
  try {
    const items = await fs.readdir(directoryPath);
    let totalItems = 0;
    let totalFiles = 0;
    let totalSize = 0;
    let largestFile = { name: "", size: 0 };
    let fileList = [];

    for (const item of items) {
      const itemPath = path.join(directoryPath, item);
      const stats = await getStats(itemPath);
      if (!stats) continue;

      totalItems++;

      if (stats.isFile()) {
        totalFiles++;
        totalSize += stats.size;

        if (stats.size > largestFile.size) {
          largestFile = { name: item, size: stats.size };
        }

        fileList.push({ name: item, size: stats.size });
      } else if (stats.isDirectory()) {
        const subDirectoryStats = await analyzeDirectory(itemPath);
        totalItems += subDirectoryStats.totalItems;
        totalFiles += subDirectoryStats.totalFiles;
        totalSize += subDirectoryStats.totalSize;

        if (subDirectoryStats.largestFile.size > largestFile.size) {
          largestFile = subDirectoryStats.largestFile;
        }

        fileList = fileList.concat(subDirectoryStats.fileList);
      }
    }

    return {
      totalItems,
      totalFiles,
      totalSize,
      largestFile,
      fileList,
    };
  } catch (err) {
    console.error("Error analyzing directory contents:", err.message);
    return {
      totalItems: 0,
      totalFiles: 0,
      totalSize: 0,
      largestFile: { name: "", size: 0 },
      fileList: [],
    };
  }
}

Vaihe 5: main-funktion määrittely ja kutsuminen

main-funktio toimii skriptin aloituspisteenä. Se määrittää analysoitavan hakemistopolun (tässä tapauksessa ./docs), kutsuu analyzeDirectory-funktiota saadakseen hakemiston ja sen sisällön tilastot, ja tulostaa kerätyt tiedot. Funktio tulostaa

  • Kohteiden kokonaismäärän;
  • Tiedostojen kokonaismäärän;
  • Kokonaiskoon;
  • Suurimman tiedoston tiedot;
  • Hakemiston tiedostoluettelon.
async function main() {
  const directoryPath = "./docs";
  const directoryStats = await analyzeDirectory(directoryPath);

  console.log("Directory Analysis:");
  console.log("Total items:", directoryStats.totalItems);
  console.log("Total files:", directoryStats.totalFiles);
  console.log("Total size (bytes):", directoryStats.totalSize);
  console.log(
    "Largest file:",
    directoryStats.largestFile.name,
    "Size:",
    directoryStats.largestFile.size,
    "bytes"
  );

  console.log("\nFile List:");
  for (const file of directoryStats.fileList) {
    console.log(file.name, "Size:", file.size, "bytes");
  }
}

main();

🎉 Yhteenveto: Hallitut taidot

DirInspect Pro:n avulla olet hallinnut hakemistojen analysoinnin taidon. Tämä konsolisovellus osoittaa kykysi kerätä tiedostotilastoja, käsitellä virheitä sujuvasti ja tuoda esiin merkityksellisiä havaintoja tiedostoista ja alihakemistoista määritellyssä hakemistossa.

👨‍💻 Sovelluksen koko koodi

const fs = require("fs").promises;
const path = require("path");

async function getStats(filePath) {
  try {
    const stats = await fs.stat(filePath);
    return stats;
  } catch (err) {
    console.error("Error getting stats:", err.message);
    return null;
  }
}

async function analyzeFile(filePath) {
  const stats = await getStats(filePath);
  if (!stats) return null;

  return {
    name: path.basename(filePath),
    size: stats.size,
  };
}

async function analyzeDirectory(directoryPath) {
  try {
    const items = await fs.readdir(directoryPath);

    let totalItems = 0;
    let totalFiles = 0;
    let totalSize = 0;
    let largestFile = { name: "", size: 0 };
    let fileList = [];

    for (const item of items) {
      const itemPath = path.join(directoryPath, item);
      const stats = await getStats(itemPath);
      if (!stats) continue;

      totalItems++;

      if (stats.isFile()) {
        totalFiles++;
        totalSize += stats.size;

        if (stats.size > largestFile.size) {
          largestFile = { name: item, size: stats.size };
        }

        fileList.push({ name: item, size: stats.size });
      } else if (stats.isDirectory()) {
        const subDirectoryStats = await analyzeDirectory(itemPath);
        totalItems += subDirectoryStats.totalItems;
        totalFiles += subDirectoryStats.totalFiles;
        totalSize += subDirectoryStats.totalSize;

        if (subDirectoryStats.largestFile.size > largestFile.size) {
          largestFile = subDirectoryStats.largestFile;
        }

        fileList = fileList.concat(subDirectoryStats.fileList);
      }
    }

    return {
      totalItems,
      totalFiles,
      totalSize,
      largestFile,
      fileList,
    };
  } catch (err) {
    console.error("Error analyzing directory contents:", err.message);
    return {
      totalItems: 0,
      totalFiles: 0,
      totalSize: 0,
      largestFile: { name: "", size: 0 },
      fileList: [],
    };
  }
}

async function main() {
  const directoryPath = "./docs";

  const directoryStats = await analyzeDirectory(directoryPath);

  console.log("Directory Analysis:");
  console.log("Total items:", directoryStats.totalItems);
  console.log("Total files:", directoryStats.totalFiles);
  console.log("Total size (bytes):", directoryStats.totalSize);
  console.log(
    "Largest file:",
    directoryStats.largestFile.name,
    "Size:",
    directoryStats.largestFile.size,
    "bytes"
  );

  console.log("\nFile List:");
  for (const file of directoryStats.fileList) {
    console.log(file.name, "Size:", file.size, "bytes");
  }
}

main();

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 10

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 2.56

bookHakemiston Tarkastustyökalu

Pyyhkäise näyttääksesi valikon

Tässä luvussa saat haasteen: kehitä edistynyt konsolisovellus nimeltä DirInspect Pro. Tämän sovelluksen avulla voit analysoida minkä tahansa hakemiston perusteellisesti ja saada hyödyllistä tilastotietoa sen tiedostoista ja alihakemistoista.

🏆 Haaste odottaa

Kuvittele tilanne, jossa sinun täytyy navigoida tärkeiden tiedostojen ja datan täyttämässä kansiolabyrintissä. DirInspect Pro on apunasi tällä matkalla, tarjoten kattavaa tietoa hakemiston rakenteesta ja sisällöstä.

🚀 Lopputuloksena syntyvä sovellus

Valmistaudu hyödyntämään DirInspect Pron ominaisuuksia. Sovellus tarjoaa sinulle keskeistä tietoa, kuten

  • Kohteiden kokonaismäärä;
  • Kaikkien kohteiden yhteenlaskettu koko;
  • Suurimman tiedoston nimi ja koko;
  • Yksittäisten tiedostojen nimet ja koot yksityiskohtaisesti.

Kaksi polkua valittavana

Edessäsi on kaksi vaihtoehtoa.

  • Ensimmäinen on tarttua haasteeseen suoraan, kehittäen taitojasi ilman ohjeita;
  • Toinen on seurata hyödyllistä opasta, joka takaa onnistumisesi.

Valitsitpa kumman tahansa, edessäsi on palkitseva matka, jonka lopputuloksena syntyy kiehtova ja toimiva konsolisovellus.

Pääsuunnitelma

  • 👉 Vaihe 1: Tuo tarvittavat moduulit;
  • 👉 Vaihe 2: Määrittele getStats-funktio;
  • 👉 Vaihe 3: Määrittele analyzeFile-funktio;
  • 👉 Vaihe 4: Määrittele analyzeDirectory-funktio;
  • 👉 Vaihe 5: Määrittele main-funktio ja kutsu sitä;
  • 🎉 Yhteenveto;
  • 🏁 Koko sovelluksen koodi.

Vaihe 1: Tuo tarvittavat moduulit

Tämän tehtävän aloittamiseen tarvitaan oikeat työkalut. Aloita tuomalla kaksi keskeistä moduulia: fs.promises tiedostojärjestelmän asynkroniseen hallintaan ja path tiedostopolkujen käsittelyyn tehokkaasti.

const fs = require("fs").promises;
const path = require("path");

Vaihe 2: Määrittele getStats-funktio

Asynkroninen funktio getStats ottaa tiedoston tai hakemiston polun argumenttina ja yrittää hakea sen tilastotiedot käyttäen fs.stat-metodia.

  • Onnistuneessa tapauksessa palauttaa tilastotiedot;
  • Virheen sattuessa kirjaa virheilmoituksen ja palauttaa null.
async function getStats(filePath) {
  try {
    const stats = await fs.stat(filePath);
    return stats;
  } catch (err) {
    console.error("Error getting stats:", err.message);
    return null;
  }
}

Vaihe 3: Määrittele analyzeFile-funktio

analyzeFile-funktio käyttää getStats-funktiota tiedoston tilastotietojen hakemiseen. Jos tilastotiedot ovat saatavilla (ei null), funktio palauttaa olion, joka sisältää tiedoston nimen (haettu path.basename-metodilla) ja sen koon.

async function analyzeFile(filePath) {
  const stats = await getStats(filePath);
  if (!stats) return null;

  return {
    name: path.basename(filePath),
    size: stats.size,
  };
}

Vaihe 4: analyzeDirectory-funktion määrittely

analyzeDirectory-funktio ottaa hakemistopolun argumenttina ja analysoi kattavasti sen sisällön.

  • Se aloittaa lukemalla hakemiston kohteet käyttäen fs.readdir ja käy sitten läpi jokaisen kohteen;
  • Jokaiselle kohteelle muodostetaan täydellinen polku käyttäen path.join ja haetaan sen tilastot getStats-funktion avulla;
  • Jos stats osoittaa, että kohde on tiedosto, päivitetään tiedostoon liittyvät tilastot;
  • Jos kohde on alihakemisto, funktiota analyzeDirectory kutsutaan rekursiivisesti analysoimaan sen sisältö ja tilastot yhdistetään.
async function analyzeDirectory(directoryPath) {
  try {
    const items = await fs.readdir(directoryPath);
    let totalItems = 0;
    let totalFiles = 0;
    let totalSize = 0;
    let largestFile = { name: "", size: 0 };
    let fileList = [];

    for (const item of items) {
      const itemPath = path.join(directoryPath, item);
      const stats = await getStats(itemPath);
      if (!stats) continue;

      totalItems++;

      if (stats.isFile()) {
        totalFiles++;
        totalSize += stats.size;

        if (stats.size > largestFile.size) {
          largestFile = { name: item, size: stats.size };
        }

        fileList.push({ name: item, size: stats.size });
      } else if (stats.isDirectory()) {
        const subDirectoryStats = await analyzeDirectory(itemPath);
        totalItems += subDirectoryStats.totalItems;
        totalFiles += subDirectoryStats.totalFiles;
        totalSize += subDirectoryStats.totalSize;

        if (subDirectoryStats.largestFile.size > largestFile.size) {
          largestFile = subDirectoryStats.largestFile;
        }

        fileList = fileList.concat(subDirectoryStats.fileList);
      }
    }

    return {
      totalItems,
      totalFiles,
      totalSize,
      largestFile,
      fileList,
    };
  } catch (err) {
    console.error("Error analyzing directory contents:", err.message);
    return {
      totalItems: 0,
      totalFiles: 0,
      totalSize: 0,
      largestFile: { name: "", size: 0 },
      fileList: [],
    };
  }
}

Vaihe 5: main-funktion määrittely ja kutsuminen

main-funktio toimii skriptin aloituspisteenä. Se määrittää analysoitavan hakemistopolun (tässä tapauksessa ./docs), kutsuu analyzeDirectory-funktiota saadakseen hakemiston ja sen sisällön tilastot, ja tulostaa kerätyt tiedot. Funktio tulostaa

  • Kohteiden kokonaismäärän;
  • Tiedostojen kokonaismäärän;
  • Kokonaiskoon;
  • Suurimman tiedoston tiedot;
  • Hakemiston tiedostoluettelon.
async function main() {
  const directoryPath = "./docs";
  const directoryStats = await analyzeDirectory(directoryPath);

  console.log("Directory Analysis:");
  console.log("Total items:", directoryStats.totalItems);
  console.log("Total files:", directoryStats.totalFiles);
  console.log("Total size (bytes):", directoryStats.totalSize);
  console.log(
    "Largest file:",
    directoryStats.largestFile.name,
    "Size:",
    directoryStats.largestFile.size,
    "bytes"
  );

  console.log("\nFile List:");
  for (const file of directoryStats.fileList) {
    console.log(file.name, "Size:", file.size, "bytes");
  }
}

main();

🎉 Yhteenveto: Hallitut taidot

DirInspect Pro:n avulla olet hallinnut hakemistojen analysoinnin taidon. Tämä konsolisovellus osoittaa kykysi kerätä tiedostotilastoja, käsitellä virheitä sujuvasti ja tuoda esiin merkityksellisiä havaintoja tiedostoista ja alihakemistoista määritellyssä hakemistossa.

👨‍💻 Sovelluksen koko koodi

const fs = require("fs").promises;
const path = require("path");

async function getStats(filePath) {
  try {
    const stats = await fs.stat(filePath);
    return stats;
  } catch (err) {
    console.error("Error getting stats:", err.message);
    return null;
  }
}

async function analyzeFile(filePath) {
  const stats = await getStats(filePath);
  if (!stats) return null;

  return {
    name: path.basename(filePath),
    size: stats.size,
  };
}

async function analyzeDirectory(directoryPath) {
  try {
    const items = await fs.readdir(directoryPath);

    let totalItems = 0;
    let totalFiles = 0;
    let totalSize = 0;
    let largestFile = { name: "", size: 0 };
    let fileList = [];

    for (const item of items) {
      const itemPath = path.join(directoryPath, item);
      const stats = await getStats(itemPath);
      if (!stats) continue;

      totalItems++;

      if (stats.isFile()) {
        totalFiles++;
        totalSize += stats.size;

        if (stats.size > largestFile.size) {
          largestFile = { name: item, size: stats.size };
        }

        fileList.push({ name: item, size: stats.size });
      } else if (stats.isDirectory()) {
        const subDirectoryStats = await analyzeDirectory(itemPath);
        totalItems += subDirectoryStats.totalItems;
        totalFiles += subDirectoryStats.totalFiles;
        totalSize += subDirectoryStats.totalSize;

        if (subDirectoryStats.largestFile.size > largestFile.size) {
          largestFile = subDirectoryStats.largestFile;
        }

        fileList = fileList.concat(subDirectoryStats.fileList);
      }
    }

    return {
      totalItems,
      totalFiles,
      totalSize,
      largestFile,
      fileList,
    };
  } catch (err) {
    console.error("Error analyzing directory contents:", err.message);
    return {
      totalItems: 0,
      totalFiles: 0,
      totalSize: 0,
      largestFile: { name: "", size: 0 },
      fileList: [],
    };
  }
}

async function main() {
  const directoryPath = "./docs";

  const directoryStats = await analyzeDirectory(directoryPath);

  console.log("Directory Analysis:");
  console.log("Total items:", directoryStats.totalItems);
  console.log("Total files:", directoryStats.totalFiles);
  console.log("Total size (bytes):", directoryStats.totalSize);
  console.log(
    "Largest file:",
    directoryStats.largestFile.name,
    "Size:",
    directoryStats.largestFile.size,
    "bytes"
  );

  console.log("\nFile List:");
  for (const file of directoryStats.fileList) {
    console.log(file.name, "Size:", file.size, "bytes");
  }
}

main();

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 2. Luku 10
some-alt