Több fájl beolvasása – node.js (glob)

Több fájl beolvasása – node.js (glob)

Bevezető Fájl műveletek Fájl olvasás Node.js

2022. április 25.

A glob egy külső harmadik fél által készített nyilvánosan elérhető csomag, ami megtalálható a node csomagkezelőben az alábbi linken: https://www.npmjs.com/package/glob

Telepítsük a csomagot (A telepítésről és a csomagkezelő használatáról korábban már írtam egy bejegyzést):

$ npm install glob

Ha ezzel megvagyunk, akkor már használhatjuk is ezt a függvénykönyvtárat.

Amit fontos megemlíteni, hogy glob-bal egy fájlok elérését tartalmazó listát kapunk és nem a fájlok tartalmát. Éppen ezért még az File System-et is használni fogjuk ebben a folyamatban, így ezt is deklarálni kell a glob mellet.

Az állományok tényleges tartalmának kinyeréséhez, pontosan ugyanazt a metódust fogjuk használni, amit a Fájl olvasása – node.js cikkeben részletesen lett vezetve.

Akkor deklaráljuk a két függvénykönyvtárat:

const glob = require('glob');
const fs = require('fs')

Ez után következik a fájlok listájának bekérése, ami lehet egy könyvtár összes állománya, vagy csak egy bizonyos kiterjesztésű fájlok listája illetve csak olyan fájlok, amik egy bizonyos szót vagy karaktert tartalmaznak.

const textFiles = glob.sync('./texts/*.txt');

Létre hoztam egy könyvtárat, aminek a texts nevet adtam és több szöveges (txt) állományt is helyeztem bele. Ezeket szeretném felolvasni programmal, de ne felejtsük, hogy a glob csak egy állomány listát ad vissza. Nézzük is meg mi ad pontosan vissza a glob. Az én esetemben az alábbi listát adja vissza, mert csak ez az öt szöveges állomány van a könyvtárban.

[
  'texts/egyes.txt',
  'texts/harmas.txt',
  'texts/kettes.txt',
  'texts/negyes.txt',
  'texts/otos.txt'
]

Ezen a tömbön végig kell lépkedni és be kell olvasnunk a fájlok valós tartalmát. Viszont hatalmas könnyebbség, hogy itt legalább már csak azok az állományok vannak, amikre tényleg szükségünk van.

A tömbön a legegyszerűbben a map függvénnyel végig lépkedni. Erről részletesen a Mozilla oldalán lehet olvasni https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

const filesContent = textFiles.map(file => fs.readFileSync(file, 'utf8'))

Ez a kód sor végig lépked az állományok elérésének listáján és az minden állomány tartalmát az fs függvénnyel beolvassa, majd visszatér ezeknek a tartalmával. Így kapjuk meg azt a változót, amibe benne van az összes általunk kiválasztott állomány tényleges tartalma. Amennyiben szeretnénk kiíratni ezt, akkor egy ehhez hasonló tömb típusú kimenetet kapunk.

[
  'elso szöveg\nmásodik soran',
  'harmas állománynmásodik sora ennek isn',
  'A kettes csak egy soros\n',
  '',
  'Az ötös is két sorosnAzonban a 4-es üres maradtn'
]

Tehát így tudunk több fájl tartalmát gyorsan és egyszerűen beolvasni.

Lássuk egyben a működő programot:

const glob = require('glob');
const fs = require('fs');

const textFiles = glob.sync('./texts/*.txt');
const filesContent = textFiles.map(file => fs.readFileSync(file, 'utf8'));

console.log(filesContent);