File Java Tutorial

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class MainClass {
  public static void main(String[] args) throws IOException {
    if (args.length != 3) {
      System.out.println("Usage: java TeeCopier infile outfile1 outfile2");
      return;
    }
    FileInputStream fin = new FileInputStream(args[0]);
    FileOutputStream fout1 = new FileOutputStream(args[1]);
    FileOutputStream fout2 = new FileOutputStream(args[2]);
    MyOutputStream tout = new MyOutputStream(fout1, fout2);
    copy(fin, tout);
    fin.close();
    tout.close();
  }
  public static void copy(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[1024];
    while (true) {
      int bytesRead = in.read(buffer);
      if (bytesRead == -1)
        break;
      out.write(buffer, 0, bytesRead);
    }
  }
}
class MyOutputStream extends FilterOutputStream {
  private OutputStream out1;
  private OutputStream out2;
  public MyOutputStream(OutputStream stream1, OutputStream stream2) {
    super(stream1);
    out1 = stream1;
    out2 = stream2;
  }
  public void write(int b) throws IOException {
    out1.write(b);
    out2.write(b);
  }
  public void write(byte[] data, int offset, int length) throws IOException {
    out1.write(data, offset, length);
    out2.write(data, offset, length);
  }
  public void flush() throws IOException {
    out1.flush();
    out2.flush();
  }
  public void close() throws IOException {
    out1.close();
    out2.close();
  }
}