Está en la página 1de 8

2/2/2021

Unidad 5 –Gestión de Ficheros


Curso de NodeJS

IES MIGUEL ROMERO ESTEO


CICLO DE ADMINISTRACIÓN DE SISEMAS INFORMATICOS Y EN
RED
CURSO DE NODEJS

Unidad 5 – Ficheros con NODE JS

ÍNDICE

1.- Introducción
2.- Lectura de ficheros
3.- Crear ficheros
4.- Operaciones con Directorios
5.- Operaciones síncronas

1.- Introducción

En NodeJS todas las operaciones de acceso al sistema de archivos están


englobadas dentro del módulo "fs" (File System). Si queremos leer un archivo de
texto que tenemos en local simplemte usaremos ese módulo para extraer el
contenido del fichero, indicando su ruta y otra serie de parámetros que ahora
describiremos.

Igual que hacemos con otros módulos de Node, hay que procesar el
correspondiente require para tener disponibles las funciones de acceso al
sistema de ficheros. Se encuentran en el module llamado 'fs' y lo vamos a
importar con el siguiente código:

var fs = require('fs');

2.- Lectura de ficheros

El método usado para leer un fichero es

fs.readFile

Este método accede a un fichero para su lectura y nos entrega el contenido en


forma de buffer o en forma de cadena.

Su sintaxis es

fs.readFile(archivo [, options], callback)

Recibe tres parámetros, siendo el segundo de ellos opcional. En el primer


parámetro le indicamos el nombre del archivo que deseamos leer. Generalmente

1
CURSO DE NODEJS

será una cadena de texto que contenga el nombre del archivo y la ruta que
estamos accediendo, pero también podrá ser un buffer.

El segundo parámetro, el opcional, puede ser tanto un objeto como una cadena.
Generalmente le indicarás una cadena que contendrá el juego de caracteres en
el que el archivo está codificado, por ejemplo 'utf-8'.

El tercer parámetro es la función callback, que se ejecutará en el momento que


el archivo está leído y se encuentra disponible para hacer alguna cosa. Esta
función recibirá dos parámetros, el archivo ya leído o bien, si ocurre algún error,
entonces recibiremos el correspondiente objeto de error de Node. Se puede ver
en el siguiente ejemplo:

var fs = require('fs');

fs.readFile('c:/nuevo.txt', 'utf8', function(err, data){

console.log(data);
});

console.log(‘Lectura terminada’);

El contenido del fichero es devuelto en la variable data. Podemos mostrarla por


pantalla con console.log(data) o bien podemos mostrarlo por el navegador.

var http = require('http');


var fs = require('fs');
http.createServer(function (req, res) {
fs.readFile('c:/index.html', function(err, data) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(data);
return res.end();
});
}).listen(8080);

Como alternativa tenemos el método readFileSync() que hace básicamente lo


mismo, pero bloquea la ejecución de las siguientes líneas de código hasta que
la lectura haya concluido y se tenga el contenido del archivo completo.

El método se usa igual, solo que dispensamos la función callback.

fs.readFileSync(file[, options])

2
CURSO DE NODEJS

Otra diferencia es que el archivo leído será devuelto por la función. Podemos
ver un ejemplo a continuación.

let archivo = fs.readFileSync('archivo2.txt', 'utf-8');

En esta función, en caso de ocurrir algún tipo de error se lanzará una excepción.
En el anterior código no lo hemos realizado, pero se debería tratar si no
queremos romper la ejecución del programa.

let fs = require('fs');
let archivo = fs.readFileSync('c:/nuevo.txt', 'utf-8');
console.log(archivo);

3.- Crear ficheros

El módulo File System dispone de los siguientes métodos para crear ficheros:

 fs.appendFile()
 fs.open()
 fs.writeFile()

El método fs.appendFile() abre el fichero específicado. Si no existe se crear:

var fs = require('fs');

fs.appendFile('c:/mas.txt', 'Hola Mundo', function (err) {


if (err) throw err;
console.log('Contenido agregado');
});

El método fs.open() utiliza un Flag como Segundo argumento. Si el flag es “w”


significa que abrimos el fichero para escritura. Si el fichero no existe se crea
automaticamente

var fs = require('fs');

fs.open('c:/nuevo.txt', 'w', function (err, file) {


if (err) throw err;
console.log('Fichero abierto');
});

El método fs.writeFile() reemplaza al fichero si éste ya existe. En caso contrario


lo crea automáticamente.

var fs = require('fs');

fs.writeFile('c:/nuevo.txt', 'Contenido nuevo', function (err) {


3
CURSO DE NODEJS

if (err) throw err;


console.log('Resuelto');
});

Ha borrado el contenido anterior y escrito el nuevo contenido.

var fs = require('fs');

fs.appendFile('c:/nuevo.txt', ' Contenido añadido', function (err) {


if (err) throw err;
console.log('Actualizado');
});

Si queremos un salto de línea tendremos que añadir \n

fs.appendFile('c:/nuevo.txt', ' \n Contenido añadido', function (err)

Para borrar un fichero se utiliza el método fs.unlink()

var fs = require('fs');

fs.unlink('c:/nuevo.txt', function (err) {


if (err) throw err;
console.log('Fichero borrado');
});

Para renombrar un fichero se utiliza el método fs.rename().

var fs = require('fs');
fs.rename('c:/mas.txt', 'c:/nuevo.txt', function (err) {
if (err) throw err;
console.log('Fichero renombrado');
});

En todos los casos hemos previsto un tratamiento de errores. Si se produce un


error se pude tratar mediante el if adecuado. Por ejemplo, si no existe el fichero
daría un error que lo reconducimos con el else

var fs = require('fs');
fs.rename('c:/nuevo.txt', 'c:/nuevo2.txt', function (err){
if (err) console.log('Fichero NO renombrado');
else console.log('Fichero renombrado');
});

4.- Operaciones con Directorios

4
CURSO DE NODEJS

EL siguiente script devuelve el número de ficheros de un path determinado

const fs = require('fs');
fs.readdir('C:/', (err, files) => {
if(err) return console.error(err);
var l=files.length;
console.log(l);
});

Este script muestra el listado de todos los ficheros. Para ello utiliza el tamaño
del array de ficheros obtenido anteriormente y el bucle for

const fs = require('fs');
fs.readdir('C:/', (err, files) => {
if(err) return console.error(err);
var l=files.length;
for(i=0;i<l;i++)
console.log(files[i]);
});

Para crear una carpeta se utiliza la función mkdir.

const fs = require('fs');
fs.mkdir('c:/uno',function(e){
if(!e || (e && e.code === 'EEXIST')){
console.log('carpeta creada') }
else { console.log(e); } });

Este script lee el contenido del path indicado y lo devuelve en la variable


archivos.

En el siguiente ejemplo mostramos el listado de ficheros en formato HTML


guardando el resultado en un fichero

const fs = require('fs');
fs.readdir('C:/', (err, files) => {
if(err) return console.error(err);
var l=files.length;
cadena="<html><body><select>";
console.log(cadena);
for(i=0;i<l;i++)
{ cadena= cadena + "<option>" + files[i] + "</option>"; }
var cadena=cadena + "</select></body></html>";

5
CURSO DE NODEJS

fs.appendFile('c:/nuevo.html', cadena, function (err) {


if (err) throw err;
}); });
En este otro ejemplo mostramos dicho listado en un fichero de texto

const fs = require('fs');
fs.readdir('C:/', (err, files) => {
if(err) return console.error(err);
var l=files.length;
for(i=0;i<l;i++)
fs.appendFile('c:/mas.txt', "\n" + files[i], function (err) {
if (err) throw err;
});
});

5.- Operaciones síncronas

Los métodos anteriores tienen sus propias versiones para operaciones


sincronas

fs.mkdirSync()
fs.rmdirSync()
fs.readdirSync()

El método fs.mkdirSync() se utiliza para crear un directorio de forma síncrona.


Su sintaxis es

fs.mkdirSync( path, options )

El parámetro path indica el nombre del directorio que vamos a crear y el


parámetro options recoge las diferentes opciones en la operación de creación.

Así, el siguiente script crea una carpeta con el nombre ·c:/uno”

const fs = require('fs');
fs.mkdirSync( "c:/uno")

6
CURSO DE NODEJS

El principal problema con el uso de fs.rmdirSync() para eliminar carpetas es el


hecho de que solo funcionará en directorios vacíos. Si el directorio no esta
vació, se verá este error:

Error: ENOTEMPTY: directory not empty, rmdir './directorio'

que obviamente no es lo que queremos. Lamentablemente, Node no tiene una


solución nativa para esto, por alguna razón, así que tendremos que buscar en
otra parte.

La solución más simple es usar un paquete npm llamado rimraf, así que
instalemos eso rápidamente.

npm i rimraf

La sintaxis es muy similar, excepto que en lugar de fs se llama rimraf.sync () (o


rimraf() para la versión asíncrona) y se pasa en su ruta como cabría esperar.

const rimraf = require('rimraf');


rimraf.sync('c:/uno');

Ahora sí podemos borrar la carpeta a pesar de que tiene ficheros en su interior.

También podría gustarte