11.5. Файловый поток FilelnputStream
          Класс FilelnputStream используется для ввода данных из файлов. В приведенном ниже примере создается два объекта этого класса, использующие один и тот же дисковый файл.
          
          
          InputStream f0 = new FileInputStream(“/autoexec.bat");
          File f = new File("/autoexec.bat"):
          InputStream f1 = new FilelnputStream(f);
          Когда создается объект класса FilelnputStream, он одновременно с этим открывается для чтения. FilelnputStream замещает шесть методов абстрактного класса InputStream. В приведенном ниже примере показано, как можно читать одиночные байты, массив байтов и поддиапазон массива байтов. В этом примере также показано, как методом available можно узнать, сколько еще осталось непрочитанных байтов и как с помощью метода skip можно пропустить те байты, которые вы не хотите читать,
          import java.io.*;
          import java.util.*;
          class FilelnputStreamS {
          public static void main(String args[]) throws Exception {
          int size;
          InputStream f1 = new FileInputStream(“/wwwroot/default.htm");
          size = f1.available();
          System.out.println("Total Available Bytes: " + size);
          System.out.println("First 1/4 of the file: read()");
          for (int i=0; i < size/4; i++) {
          System.out.print((char) f1.read());
          }
          System.out.println("Total Still Available: " + f1.available());
          System.out.println("Reading the next 1/8: read(b[])");
          byte b[] = new byte[size/8];
          if(fl.read(b) !=b.length) {
          System.err.println("Something bad happened");
          }
          String tmpstr = new String(b, 0,0, b.length);
          System.out.println(tmpstr);
          System.out.println("Still Available: " + f1.available());
          System.out.println("Skipping another 1/4: skip()");
          f1.skip(size/4);
          System.out.println( "Still Available: " + f1.available());
          System.out.println("Reading 1/16 into the end of array");
          if (f1.read(b, b.length-size/16, size/16) != size/16) {
          System.err.println("Something bad happened");
          }
          System.out.println("Still Available: " + f1.available());
          f1.close();
          }
          }
          11.6. Файловый поток FileOutputStream
          У класса FileOutputStream — два таких же конструктора, что и у FileInputStream Однако создавать объекты этого класса можно независимо от того, существует файл или нет. При создании нового объекта класс FileOutputStream перед тем, как открыть файл для вывода, сначала создает его. В очередном нашем примере символы, введенные с клавиатуры, считываются из потока System.in - по одному символу за вызов до тех пор, пока не заполнится 12-байтовый буфер. После этого создаются три файла. В первый из них, filel.txt, записываются символы из буфера, но не все, а через один — нулевой, второй и так далее. Во второй, file2.txt, записывается весь ввод, попавший в буфер. И, наконец, в третий файл записывается половина буфера, расположенная в середине, а первая и последняя четверти буфера не выводятся.
          import java.io.*;
          class FileOutputStreamS {
          public static byte getlnput()[] throws Exception {
          byte buffer[] = new byte[12];
          for (int i=0; i<l 2; i++) {
          buffer[i] = (byte) System.in.read();
          }
          return buffer;
          }
          public static void main(String args[]) throws Exception {
          byte buf[] = getlnput();
          OutputStream f() = new FileOutputStream("filel.txt");
          OutputStream f1 = new FileOutputStream("file2.txt");
          OutputStream f2 = new FileOutputStream("file3.txt");
          for (int i=0; i < 12; i += 2) {
          f0.write(buf[i]);
          }
          f0.close();
          f1.write(buf);
          f1.close();
          f2.write(buf, 12/4,12/2);
          f2.close();
          }
          }