Программирование на JAVA
Меню :
Стартовая
Основы программирования
Программирование на JAVA
Программирование на C++
Программирование на Pascal
Задачи по программированию
outFile = new FileOutputStreamCfile3.txt");
int readedByte = sequenceStream.read();
while( readedByte!—1){
outFile.write(readedByte);
readedByte = sequenceStream.read();
}
} catch (lOException e) {
System.out.println("IOException: " + e.toStringO); } finally {
try{sequenceStrearn.close();}catch(IOException e){}; try{outFile.close();}catch(IOException e){};
}
В результате выполнения этого примера в файл file3.txt будет записано содержимое файлов filel .txt и file2.txt — сначала полностью filel .txt, потом file2.txt. Закрытие потоков производится в блоке finally. Поскольку при вызове метода close() может возникнуть lOException, необходим try-catch блок. Причем, каждый вызов метода close() взят в отдельный try-catch блок - для того, чтобы возникшее исключение при закрытии одного потока не помешало закрытию другого. При этом нет необходимости закрывать потоки inFilel и inFile2 - они будут автоматически закрыты при использовании в sequnceStream - либо когда в них закончатся данные, либо при вызове у sequenceStream метода close().
Объект SequencelnputStream можно было создать и другим способом: сначала получить объект Enumeration, содержащий все потоки, п передать его в конструктор SequencelnputStream:
Vector vector = new Vector();
vector.add(new StringBufferlnputStreamf'Begin filel\n")); vector.add(new FilelnputStream("file1 .txt"));
vector.add(new StringBufferlnputStream("\nEnd of filel, begin file2\n")); vector.add(new FilelnputStream("file2.txt")); vector.add(new StringBufferlnputStream("\nEnd of file2")); Enumeration enum = vector.elements(); sequenceStream = new SequencelnputStream(enum);
Если заменить в предыдущем примере инициализацию sequenceStream на приведенную здесь, то в файл file3.txt, кроме содержимого файлов filet .txt и file2.txt, будут записаны еще три строки -одна в начате файла, одна между содержимым файлов filel .txt и file2.txt и еще одна в конце file3.txt.
Классы FilterlnputStreeam и FilterOutputStream и их наследники
Задачи, возникающие при вводе/выводе весьма разнообразны - это может быть считывание байт из файлов, объектов из файлов, объектов из массивов, буферизованное считывание строк из массивов и т.д. В такой ситуации решение с использованием простого наследования приводит к возникновению слишком большого числа подклассов