Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
TheSequenceInputStream
creates a single input stream from multiple input sources. This example program,Concatenate
, usesSequenceInputStream
to 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
Concatenate
utility: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(); } }Concatenate
utility creates aListOfFiles
object namedmylist
which is initialized from the command line arguments entered by the user. The command line arguments list the files to be concatenated together. Themylist
object is an enumeration thatSequenceInputStream
uses to get a newInputStream
whenever 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; } }ListOfFiles
implements theEnumeration
interface. You'll see how this comes into play as you walk through the rest of the program.After creating the
SequenceInputStream
, themain
method reads from that stream one byte at a time. When it needs anInputStream
from a new source, such as for the first byte read or when it runs off the end of the current input stream, theSequenceInputStream
callsnextElement
on theEnumeration
object to get the nextInputStream
.ListOfFiles
createsFileInputStream
objects lazily. This means that wheneverSequenceInputStream
callsnextElement
,ListOfFiles
opens aFileInputStream
on the next file name in the list and returns the stream. When theListOfFiles
runs out of files to read (it has no more elements),nextElement
returnsnull
, and the call toSequenceInputStream
'sread
method returns-1
to indicate the end of input.
Try this: Try runningConcatenate
on thefarrago.txt
andwords.txt
files; 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.