
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);