Tener en cuenta que en NodeJS para trabajar con archivos, existen dos maneras de hacerlo:
A continuación muestro cómo puedes trabajar con ficheros de ambas maneras. En cada caso se hace referencia a la dependencia fs
(File System) de NodeJS que se puede importar como se muestra en el ejemplo siguiente:
const fs = require('fs');
// leer fichero de manera sincrónica
fs.readfile('path/to/the/file', (err, content) => {
if (err) {
console.error(err);
}
console.log(contect)
});
// leer fichero de manera asincrónica
const content = fs.readfileSync('path/to/the/file');
console.log(content);
En caso de ficheros muy grandes, claramente no podemos leer el fichero completo en memoria, y para esto se puede hacer uso de Stream. A continuación un ejemplo de cómo leer un fichero grande.
const stream = fs.createReadStream('./request.md');
stream.on('data', (chunk) => {
console.log(chunk.toString());
});
stream.on('close', (data) => {
console.log('no more data');
});
En el caso anterior, se puede notar que el archivo se leerá por trozos en vez de completamente. Con esto se pueden leer archivos muy grandes que cargarlos en memoria pueda significar lentitud o demora.
En el caso de crear/editar fichero, se utiliza la función de escribir. Esta función crea automáticamente el fichero si no existe o lo modifica en caso contrario.
// escribir en fichero de manera asincrónica
fs.writeFile('./tmp.dat', 'information inside file', {}, () => {
console.log('file saved');
});
// escribir en fichero de manera sincrónica
fs.writeFileSync('./tmp2.dat', "information inside file 2");
Al igual que para leer un archivo muy grande, se puede hacer una lectura por partes del mismo, a la hora de escribir existe la misma opción para escribir por partes.
// escribir en fichero por partes
const streamWrite = fs.createWriteStream('./tmp3.dat');
streamWrite.write('line1\n');
streamWrite.write('line2\n');
streamWrite.write('line3\n');
streamWrite.end();
// eliminar fichero de manera asincrónica
fs.unlink('./tmp.dat', (err) => {
if (err) {
console.error(err);
}
console.log('removed');
});
// eliminar fichero de manera sincrónica
fs.unlinkSync('./tmp2.dat');
Happy coding!