/*
  This is a modification of the IO_demo_2 code
  This version handles opening and closing a file.
  This version also takes advantage of the ablity to set the
  delimiter in the tokenizer
 */

import java.io.*;
import java.util.*; //need for the string tokenizer

class ReadLines
{
    StringTokenizer st;
    boolean verbose;
    BufferedReader i_stream;
    BufferedWriter o_stream;
    char delim;
    String source, destination;

    
    ReadLines( boolean v, char delimiter) 
    {
	verbose = v;
	delim = delimiter;
	BufferedReader br = new BufferedReader( 
			       new InputStreamReader(System.in));
	try {
	    System.out.print("Enter the input filename: " );
	    source = br.readLine().trim();
	    FileReader i_file = new FileReader( source );
	    System.out.print("Enter the destination filename: " );
	    destination = br.readLine().trim();
	    FileWriter o_file = new FileWriter( destination );
	    i_stream = new BufferedReader( i_file );
	    o_stream = new BufferedWriter( o_file );
	} catch ( IOException e ) {
	    System.out.print(e.getMessage() );
	}
    }



    ReadLines ( char delimiter )
    {
	verbose = true;
	delim = delimiter;
	BufferedReader br = new BufferedReader( 
			       new InputStreamReader(System.in));
	try {
	    System.out.print("Enter the input filename: " );
	    source = br.readLine().trim();
	    FileReader i_file = new FileReader( source );
	    System.out.print("Enter the destination filename: " );
	    destination = br.readLine().trim();
	    FileWriter o_file = new FileWriter( destination );
	    i_stream = new BufferedReader( i_file );
	    o_stream = new BufferedWriter( o_file );
	} catch ( IOException e ) {
	    System.out.print(e.getMessage() );
	}
    }

    String get_line()
    {
	String s = null;

	if ( verbose ) 
	    System.out.print("get_line(), Reading from file\n");

	try {
	    s = i_stream.readLine();
	}
	catch( IOException e) {
	    System.out.println(e.getMessage());
	}

	if ( verbose )
	    System.out.println("get_line(), String read [" + s + "]" );
	return s;
    }

    void put_line( String s )
    {
	s = s + "\n";
	try {
	    o_stream.write( s );
	}
	catch ( IOException e ) {
	    System.out.println(e.getMessage() );
	}
	if ( verbose )
	    System.out.print("write_line(), wrote [" + s + "]\n");

    }

    void close_files()
    {
	try {
	    i_stream.close();
	    o_stream.close();
	}
	catch ( IOException e ) {
	    System.out.println( e.getMessage() );
	}
    }
    
}


public class IO_demo_3
{
    public static void main (String []args)
    {
	ReadLines rl = new ReadLines(':');
	String s;
	
	s = rl.get_line();
	for ( int i=0; s != null; i++ ) {
	    rl.put_line( i + " : " + s );
	    s = rl.get_line();
	}

	rl.close_files();
	
    }
    
}


