Programación en castellano
Inicio > Tutoriales > J2SE > I/O: Leer y Escibir
-Tutoriales

I/O: Leer y Escibir


Cómo Concatenar Ficheros

SequenceInputStream crea un sólo stream de entrada desde varias fuentes de entrada. Este programa de ejemplo Concatenate, usa SequenceInputStream para implementar la utilidad de concatenación que secuencialmente concatena ficheros en el orden que son listados en la línea de comandos:

Esta es la clase controladora de la utilidad Concatenate:

import java.io.*;

public class Concatenate {
    public static void main(String[] args) throws IOException {
        ListOfFiles mylist = new ListOfFiles(args);

        SequenceInputStream s = new SequenceInputStream(mylist);
        int c;

        while ((c = s.read()) != -1)
           System.out.write(c);

        s.close();
    }
}

Lo primero que hace esta clase es crear un objeto ListOfFiles llamado mylist que es inicializado con los argumentos de la línea de comandos introducidos por el usuario. Los argumentos de la línea de comandos listan los ficheros a concatenar. Se usa mylist para inicializar SequenceInputStream que usa mylist para obtener un nuevo InputStream para cada ficheros de lista:

import java.util.*;
import java.io.*;

public class ListOfFiles implements Enumeration {

    private String[] listOfFiles;
    private int current = 0;

    public ListOfFiles(String[] listOfFiles) {
        this.listOfFiles = listOfFiles;
    }

    public boolean hasMoreElements() {
        if (current < listOfFiles.length)
            return true;
        else
            return false;
    }

    public Object nextElement() {
        InputStream in = null;

        if (!hasMoreElements())
            throw new NoSuchElementException("No more files.");
        else {
            String nextElement = listOfFiles[current];
            current++;
            try {
                in = new FileInputStream(nextElement);
            } catch (FileNotFoundException e) {
                System.err.println("ListOfFiles: Can't open " + nextElement);
            }
        }
        return in;
    }
}

ListOfFiles implementa el interface Enumeration. Veremos como esto entra en juego cuando pasemos por el resto del programa.

Después el método main crea el SequenceInputStream, lee un byte cada vez. Cuando el SequenceInputStream necesita un InputStream de una nueva fuente (como para el primer byte leído o cuando alcanza el final del inputstream actual), llama a nextElement sobre el objeto Enumeration para obetener el siguiente InputStream. ListOfFiles crea objetos FileInputStream enforma de lazo, lo que significa que siempre que SequenceInputStream llama a nextElement, ListOfFiles abre un FileInputStream sobre el siguiente nombre de ficheros de la lista y devuelve el stream. Cuando el ListOfFiles llega al final de los ficheros a leer (no tiene más elementos), nextElement devuelve null, y la llamada al método read de SequenceInputStream devuelve -1 para indicar el final de la entrada.

Concatenate simplemente hace eco de todos los datos leidos desde el SequenceInputStream a la salida estándar.

Prueba Esto:

Intenta ejecutar Concatenate sobre los ficheros farrago.txt y words.txt que han sido usados como entradas para otros ejemplos de esta lección.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados