// =========================================================
// Демонстрация использования потоков для работы с файлами
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW:    http://www.glasnet.ru/~frolov
//            или
//         http://www.dials.ccas.ru/frolov
// =========================================================
import java.io.*;

public class StreamDemo
{
	// -------------------------------------------------------
  // main
  // Метод, получающий управление при запуске приложения
  // -------------------------------------------------------
  public static void main(String args[])
  {
    // Выходной поток
    DataOutputStream OutStream;

    // Входной поток
    DataInputStream  InStream;

    // Массив для ввода строки с клавиатуры
    byte bKbdInput[] = new byte[256];

    // Введенная строка, которая будет записана в поток
    String sOut;

    // Выполняем попытку вывода на консоль строки приглашения
    try
    {
      // Выводим строку приглашения
      System.out.println("Hello, Java!\n" + 
        "Enter string and press <Enter>...");
      
      // Читаем с клавиатуры строку для записи в файл
      System.in.read(bKbdInput);

      // Преобразуем введенные символы в строку типа String
      sOut = new String(bKbdInput, 0);
    }
    catch(Exception ioe)
    {
      // При возникновении исключения выводим его описание
      // на консоль
      System.out.println(ioe.toString());
    }
    
    // Выполняем попытку записи в выходной поток
    try
    {
      // Создаем выходной буферизованный поток данных
      OutStream = new DataOutputStream(
        new BufferedOutputStream(
          new FileOutputStream("output.txt")));

      // Записываем строку sOut в выходной поток
      OutStream.writeBytes(sOut);

      // Сбрасываем содержимое буфера вывода
      OutStream.flush();

      // Закрываем выходной поток
      OutStream.close();
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
    
    // Выполняем попытку чтения из файла
    try
    {
      // Создаем входной буферизованный поток данных
      InStream = new DataInputStream(
        new BufferedInputStream(
          new FileInputStream("output.txt")));

      // Читаем одну строку из созданного входного потока
      // и отображаем ее на консоли
      System.out.println(InStream.readLine());

      // Закрываем входной поток
      InStream.close();
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }

    // Ожидаем ввода с клавиатуры, а затем завершаем 
    // работу приложения
    try
    {
      System.out.println(
        "Press <Enter> to terminate application...");

      System.in.read(bKbdInput);
    }
    catch(Exception ioe)
    {
      System.out.println(ioe.toString());
    }
  }
}