package TestIngresso;
 
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
 
public class CatN {
 
	/**
	 * metodo dell'oggetto CatN<br>Il metodo non e' dichiarato statico, dal momento che utilizziamo nel main un oggetto CatN per 
	 * richiamarlo. Usare un metodo statico solo perche' si chiama nel main non e' corretto, in generale, anche se puo' non provocare 
	 * errori in fase di esecuzione. 
	 * 
	 * @param is rappresenta l'InputStream che si vuole copiare sullo standard output
	 */
	public void copy(InputStream is) {
		final int MAXBUFFER = 1024;
		byte [] buffer = new byte[MAXBUFFER];
		int letti = 0; 
 
		try {
			while( (letti = is.read(buffer,0,MAXBUFFER))!= (-1)) {
				System.out.write(buffer,0,letti);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return;
	}
 
	/**
	 * Main del programma: controlla se ci sono argomenti. Se non ve ne sono, si configura come un filtro (legge lo standard input e
	 * scrive lo standard output) altrimenti copia tutti i file di cui viene passato il nome dalla riga di comando
	 *
	 * @param args ciascun parametro rappresenta un nome di file da copiare sullo standard output
	 */
	public static void main(String[] args) {
		// creazione dell'oggetto copiatore
		CatN copier = new CatN();
 
		if(args.length == 0) {  // se non ci sono parametri, funziona da filtro
			copier.copy(System.in);
		} else {	// altrimenti processa tutti i file passati come argomento
			for(int i=0; i<args.length; i++) {
				InputStream is = null;
				try {
					is = new FileInputStream(args[i]);  // apri il file
					copier.copy(is);                    // quindi copialo 
				} catch (FileNotFoundException e) {     // se non esiste, segnala l'errore e continua con il prossimo file
					System.out.println("File "+args[i]+" non trovato");
				}
			}
		}
	}
 
}