Hilos en java
Normalmente estamos acostumbrados a que en un curso de programación java nos enseñan a usar threads (hilos o mejor dicho hebras) de maneras que nos dejan como a medias, el típico ejemplo de mostrar mensajes o series de números pero rara vez (al menos en mi caso) nos muestran algún ejemplo práctico.
Ok pues de eso trata esta humilde entrada, es un programa hecho en java por supuesto, que tiene como función copiar todos los archivos de una carpeta a otra mediante hilos.
En resumen
Una vez que se ejecuta el programa inicia la copia de los archivos de forma simultanea, ya que por cada hilo existente dentro de la carpeta que se le pase como parámetro origen se genera un hilo que se encarga de copiar dicho archivo.
Veamos
Se ejecuta en modo terminal, de la forma ‘java ArchivosHilos carpetaOrigen carpetaDestino’.
Una vez ejecutado veremos lo siguiente:
Aquí el código fuente.
import java.io.*;
class CopiaArchivo extends Thread {
String archivoOriginal;
String archivoCopia;
public CopiaArchivo(){
}
//CONSTRUCTOR QUE PASA LOS NOMBRES DE LOS ARCHIVOS COMO PARAMETROS
//PARA CREAR LOS NUEVOS OBJETOS HILOS CON LOS PARAMETROS NECESARIOS
public CopiaArchivo(String archivoOriginal, String archivoCopia){
this.archivoOriginal=archivoOriginal;
this.archivoCopia=archivoCopia;
}
//El metodo Run el mas importante...
public void run() {
System.out.println("hilo.." + archivoOriginal + " .. " + archivoCopia);
try{
// Se abre el archivo original para lectura
FileInputStream fileInput = new FileInputStream(archivoOriginal);
BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
// Se abre el archivo donde se hará la copia
FileOutputStream fileOutput = new FileOutputStream (archivoCopia);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput);
// Bucle para leer de un archivo y escribir en el otro.
byte [] array = new byte[1000];
int leidos = bufferedInput.read(array);
while (leidos > 0)
{
bufferedOutput.write(array,0,leidos);
leidos=bufferedInput.read(array);
}
// Cierre de los archivos
bufferedInput.close();
bufferedOutput.close();
}
catch (Exception e)
{
System.out.println("Error: " + e.getMessage());
//e.printStackTrace();
}
}
}
public class ArchivosHilos{
public static void modoUso(){
System.out.println("---------------------------------------------------------------");
System.out.println("Modo de uso\n\tjava CopiaArchivos carpetaOrigen carpetaDestino");
System.out.println("---------------------------------------------------------------");
}
public static void main(String []args){
try{
if (args[1].equals(null)){
modoUso();
}
else{
//Obtener una listado de archivos de la carpeta archivoOriginal
File dir = new File(args[0]);
String[] archivos = dir.list();
File dir2 = new File(args[1]);
String[] archivos2 = dir2.list();
if (archivos == null)
System.out.println("\nNo existe el directorio origen "+ args[0] + ".......");
else
if (archivos2 == null)
System.out.println("\nNo existe el directorio destino "+ args[1] + ".......");
else {
System.out.println("\nArchivos en el directorio "+ args[0] + ".......");
//Mostrar los archivos existentes...
for (int x=0;x System.out.print(archivos[x] + "\t");
}
System.out.println("\nIniciando el proceso de copia...\n");
CopiaArchivo []hilos=new CopiaArchivo[archivos.length];
//Iniciar la copia de archivos...
for (int x=0;x System.out.println("Iniciando la copia de " + archivos[x]);
//ACÁ SE CREAN LOS HILOS PARA INICIAR LA COPIA DE ARCHIVOS
hilos[x] = new CopiaArchivo(args[0]+"/"+archivos[x] , args[1]+"/"+archivos[x]);
//inicia el hilo
hilos[x].start();
System.out.println("El archivo " + archivos[x] + " ha sido copiado correctamente!");
}
//Esperar a q terminen todos
for (int x=0; x hilos[x].join();
}
}
System.out.println();
}
}
catch(ArrayIndexOutOfBoundsException e){
modoUso();
}
catch (Exception e){
modoUso();
}
}
}
Filed under: Java, Programación | 2 Comentarios »



















