package weka.classifiers.rules.sortinghandler;
/**
* This code is from the book:
*
* Winder, R and Roberts, G (1998) <em>Developing Java
* Software</em>, John Wiley & Sons.
*
* It is copyright (c) 1997 Russel Winder and Graham Roberts.
*/
import java.io.File ;
import java.io.FileNotFoundException ;
import java.io.IOException ;
/**
* A function object to copy a file containing <code>Record</code>s..
*
* @see Record
* @see RecordReader
* @see RecordWriter
* @see RecordInformation
* @see BalancedMergeSort
* @see PolyPhaseMergeSort
* @version 1.0 2.7.1997
* @author Russel Winder
*/
public final class RecordCopyFile
{
/**
* The per object copy function.
*
* @param from the file to read <code>Record</code>s from.
*
* @param to the file to write <code>Record</code>s from.
*
* @param rInfo the factory object required to be able to
* construct the <code>Reader</code> and <code>Writer</code> of
* <code>Record</code>s.
*
* @return the number of records copied.
*/
public int copy(final File from,
final File to,
final RecordInformation rInfo)
throws FileNotFoundException, IOException
{
return execute(from, to, rInfo) ;
}
/**
* The static access to the copying function object.
*
* @param from the file to read <code>Record</code>s from.
*
* @param to the file to write <code>Record</code>s from.
*
* @param rInfo the factory object required to be able to
* construct the <code>Reader</code> and <code>Writer</code> of
* <code>Record</code>s.
*
* @return the number of records copied.
*/
public static int execute(final File from,
final File to,
final RecordInformation rInfo)
throws FileNotFoundException, IOException
{
//
// Set up the Reader and the Writer.
//
RecordReader source = rInfo.newRecordReader(from) ;
RecordWriter target = rInfo.newRecordWriter(to) ;
//
// Copy all the Records from the Reader to the Writer.
//
int count = 0 ;
while (true)
{
Record r = source.readRecord() ;
if (r == null)
break ;
target.writeRecord(r) ;
count++ ;
}
//
// Close the files and ensure the flush.
//
source.close() ;
target.close() ;
return count ;
}
}