|
|
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
TheSequenceInputStreamcreates a single input stream from multiple input sources. This example program,
Concatenate, uses
SequenceInputStreamto implement a concatenation utility that sequentially concatenates files together in the order they are listed on the command line.This is the controlling class of the
Concatenateutility:First, theimport java.io.*; public class Concatenate { public static void main(String[] args) throws IOException { ListOfFiles mylist = new ListOfFiles(args); SequenceInputStream s = new SequenceInputStream(mylist); int c; while ((c = s.read()) != -1) System.out.write(c); s.close(); } }Concatenateutility creates aListOfFilesobject namedmylistwhich is initialized from the command line arguments entered by the user. The command line arguments list the files to be concatenated together. Themylistobject is an enumeration thatSequenceInputStreamuses to get a newInputStreamwhenever it needs one.import java.util.*; import java.io.*; public class ListOfFiles implements Enumeration { private String[] listOfFiles; private int current = 0; public ListOfFiles(String[] listOfFiles) { this.listOfFiles = listOfFiles; } public boolean hasMoreElements() { if (current < listOfFiles.length) return true; else return false; } public Object nextElement() { InputStream in = null; if (!hasMoreElements()) throw new NoSuchElementException("No more files."); else { String nextElement = listOfFiles[current]; current++; try { in = new FileInputStream(nextElement); } catch (FileNotFoundException e) { System.err.println("ListOfFiles: Can't open " + nextElement); } } return in; } }ListOfFilesimplements theEnumerationinterface. You'll see how this comes into play as you walk through the rest of the program.
After creating the
SequenceInputStream, themainmethod reads from that stream one byte at a time. When it needs anInputStreamfrom a new source, such as for the first byte read or when it runs off the end of the current input stream, theSequenceInputStreamcallsnextElementon theEnumerationobject to get the nextInputStream.ListOfFilescreatesFileInputStreamobjects lazily. This means that wheneverSequenceInputStreamcallsnextElement,ListOfFilesopens aFileInputStreamon the next file name in the list and returns the stream. When theListOfFilesruns out of files to read (it has no more elements),nextElementreturnsnull, and the call toSequenceInputStream'sreadmethod returns-1to indicate the end of input.
Try this: Try runningConcatenateon thefarrago.txtand
words.txtfiles; both are used as input to other examples in this lesson.
|
|
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2004 Sun Microsystems, Inc. All rights reserved.