In Java...
Lettore:
Scrittore:codice:import java.io.*; public class Lettore extends Thread { private Buffer buffer; private String nomeFile; private BufferedReader br; public Lettore(Buffer buffer, String nomeFile) { try { this.buffer = buffer; this.nomeFile = nomeFile; br = new BufferedReader( new InputStreamReader( new FileInputStream(nomeFile)) ); } catch (Exception e) {} } public void run() { try { System.out.println("Inizio lettura file..."); String linea; while ((linea = br.readLine()) != null) { buffer.scrivi(linea); } buffer.disattiva(); System.out.println("Fine lettura file"); } catch (Exception e) {} } }
Buffer:codice:import java.io.*; public class Scrittore extends Thread { private Buffer buffer; private String nomeFile; private PrintStream ps; public Scrittore(Buffer buffer, String nomeFile) { try { this.buffer = buffer; this.nomeFile = nomeFile; ps = new PrintStream( new FileOutputStream(nomeFile) ); } catch (Exception e) {} } public void run() { try { System.out.println("Inizio scrittura file..."); String linea; while ((linea = buffer.leggi()) != null) { ps.println(linea); } ps.close(); System.out.println("Fine scrittura file"); } catch (Exception e) {} } }
Il programma principale:codice:public class Buffer { private String [] linee = new String[5]; // Memorizzo al massimo 5 linee alla volta private int primaLineaLibera; private int primaLineaDaPrendere; private int numLinee; private boolean attivo; public Buffer() { primaLineaLibera = primaLineaDaPrendere = numLinee = 0; attivo = true; } public synchronized void scrivi(String linea) { while (numLinee == 5) { try { wait(); } catch (Exception e) {} } linee[primaLineaLibera] = linea; primaLineaLibera = (primaLineaLibera + 1) % 5; numLinee++; notifyAll(); } public synchronized String leggi() { String tmp = null; if (attivo || (numLinee > 0)) { while (numLinee == 0) { try { wait(); } catch (Exception e) {} } tmp = linee[primaLineaDaPrendere]; primaLineaDaPrendere = (primaLineaDaPrendere + 1) % 5; numLinee--; notifyAll(); } return tmp; } public void disattiva() { attivo = false; } }
Come si usa:codice:public class Copia { public static void main(String [] args) { Buffer b = new Buffer(); Lettore l = new Lettore(b, args[0]); Scrittore s = new Scrittore(b, args[1]); l.start(); s.start(); } }
Dovrebbe funzionare...codice:$ java Copia {fileSorgente} {fileDestinazione} {fileSorgente}: un file di testo {fileDestinazione}: il nome del file da creare contenente la copia del file Sorgente
Ciao.![]()



Rispondi quotando