Cliente – Suministrador

Vamos a crear un suministrador que facilita datos y un cliente que los consume (o un productor y un consumidor).

proceso cliente-suministrador

(punto 6.1.1 en plataforma Moodle: Categoría de proceso cliente-suministrador)

Bloquear un fichero con Java

FileChannel

proceso cliente-suministrador

(punto 6.3.1 en plataforma Moodle: Lecturas y escrituras bloqueantes en recursos compartidos)

Cliente:

import java.io.File;
import java.io.RandomAccessFile;
import java.io.PrintStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileLock;

public class Cliente {

    /**
     * @param args Argumentos de la línea de comando
     *             El primer argumento pasado, será la ruta del fichero
     */
    public static void main(String[] args) {

        String nombreFichero = "";
        File archivo = null;
        RandomAccessFile raf = null;
        FileLock bloqueo = null;
        int cuenta = 1;
        int valor;
/*
        try{
            //Rediregimos salida y error estándar a un fichero
            PrintStream ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(new File("javalog_cliente.txt"),true)), true);
            System.setOut(ps);
            System.setErr(ps);
        } catch(Exception e){
            System.err.println("Cliente. No he podido redirigir salidas.");
        }
*/

        if (args.length > 0)
            nombreFichero = args[0];
            //Hemos recibido la ruta del fichero en la línea de comandos
        else
            nombreFichero = "/home/usuario/buffer.txt";
        //Fichero que se utilizará por defecto

        //Preparamos el acceso al fichero
        archivo = new File(nombreFichero);
        while (cuenta <= 10) {//leeremos 10 datos
            try {
                raf = new RandomAccessFile(archivo, "rwd"); //Abrimos el fichero
                //***************
                //Sección crítica
 
 
 
 
 
 
 
 
 
 
 
                //Fin sección crítica
                //*******************
                Thread.sleep(1000);//simulamos tiempo de procesamiento del dato
                cuenta ++;
            } catch (Exception e) {
                System.err.println("Cliente. Error al acceder al fichero.");
                System.err.println(e.toString());
            } finally {
                try {
                    if (bloqueo != null) bloqueo.release();
                    if (raf != null) raf.close();
                } catch (Exception e2) {
                    System.err.println("Cliente. Error al cerrar el fichero.");
                    System.err.println(e2.toString());
                    System.exit(1);  //Si hay error, finalizamos
                }
            }
        }
    }
}

Suministrador:

import java.io.File;
import java.io.RandomAccessFile;
import java.io.PrintStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileLock;

public class Suministrador {

    /**
     * @param args Argumentos de la línea de comando
     *             El primer argumento pasado, será la ruta del fichero
     */
    public static void main(String[] args) {

        String nombreFichero = "";
        File archivo = null;
        RandomAccessFile raf = null;
        FileLock bloqueo = null;
        int i = 1;

      /*
        try{
            //Rediregimos salida y error estándar a un fichero
            PrintStream ps = new PrintStream(
                             new BufferedOutputStream(new FileOutputStream(
                             new File("javalog_suministrador.txt"),true)), true);
            System.setOut(ps);
            System.setErr(ps);
        } catch(Exception e){
            System.err.println("Suministrador. No he podido redirigir salidas.");
        }
*/
        if (args.length > 0)
            nombreFichero = args[0];
            //Hemos recibido la ruta del fichero en la línea de comandos
        else
            nombreFichero = "/home/usuario/buffer.txt";
        //Fichero que se utilizará por defecto

        //Preparamos el acceso al fichero
        archivo = new File(nombreFichero);

        while (i <= 10) {//escribiremos 10 datos
            try {
                raf = new RandomAccessFile(archivo, "rwd"); //Abrimos el fichero
                //***************
                //Sección crítica








                //Fin sección crítica
                //*******************
                Thread.sleep(500); //Simulamos tiempo de creación del dato
            } catch (Exception e) {
                System.err.println("Suministrador. Error al acceder al fichero.");
                System.err.println(e.toString());
            } finally {
                try {
                    if (bloqueo != null) bloqueo.release();
                    if (raf != null) raf.close();
                } catch (Exception e2) {
                    System.err.println("Suministrador. Error al cerrar el fichero.");
                    System.err.println(e2.toString());
                    System.exit(1);  //Si hay error, finalizamos
                }
            }
        }
    }
}

Abrir en una ventana el cliente:

javac Cliente.java
java Cliente numeros.txt

y en otra el suministrador:

javac Suministrador.java
java Suministrador numeros.txt

 

 

 

Deja una respuesta