таннього потоку. Якщо при зчитуванні виявляється, що більше вхідних потоків немає, SequenceInputStream повертає -1. Виклик методу close () у SequenceInputStream закриває все що містяться в ньому вхідні потоки. p align="justify"> Приклад:
FileInputStream inFile1 = null; inFile2 = null; sequenceStream = null; outFile = null; {= new FileInputStream ("file1.txt"); = new FileInputStream ("file2.txt"); = new SequenceInputStream (inFile1, inFile2); = new FileOutputStream ("file3.txt"); readedByte = sequenceStream.read (); (readedByte! = -1) {. write (readedByte); = sequenceStream.read ();
}
} catch (IOException e) {. out.println ("IOException:" + e.toString ());
} finally {{sequenceStream.close ();} catch (IOException e) {}; {outFile.close ();} catch (IOException e) {};
}
В результаті виконання цього прикладу в файл file3.txt буде записано вміст файлів file1.txt і file2.txt - спочатку повністю file1.txt, потім file2.txt. Закриття потоків здійснюється в блоці finally. Оскільки при виклику методу close () може виникнути IOException, необхідний try-catch блок. Причому, кожен виклик методу close () взято в окремий try-catch блок - для того, щоб виникло виключення при закритті одного потоку не завадило закриття іншого. При цьому немає необхідності закривати потоки inFile1 і inFile2 - вони будуть автоматично закриті при використанні в sequenceStream - або коли в них закінчаться дані, або при виклику у sequenceStream методу close (). p align="justify"> Об'єкт SequenceInputStream можна було створити і іншим способом: спочатку отримати об'єкт Enumeration, що містить всі потоки, і передати його в конструктор SequenceInputStream:
Vector vector = new Vector ();. add (new StringBufferInputStream ("Begin file1 n"));. add (new FileInputStream ("file1.txt"));. add ( new StringBufferInputStream (" nEnd of file1, begin file2 n"));. add (new FileInputStream ("file2.txt"));. add (new StringBufferInputStream (" nEnd of file2")); en = vector.elements (); = new SequenceInputStream (en);
Якщо замінити в попередньому прикладі ініціалізацію sequenceStream на наведену тут, то у файл file3.txt, крім вмісту файлів file1.txt і file2.txt, будуть записані ще три рядки - одна на початку файлу, одна між вмістом файлів file1.txt і file2.txt і ще одна в кінці file3.txt.
У підсумку зазначимо, що Java має широкий набір інструментів для забезпечення введення-виведення даних в цілому і запису і читання файлів зокрема.
СПИСОК ЛІТЕРАТУРИ
1. Арнольд К., Гослінг Дж. В«Мова програмування JavaВ»
2. Хорстманн К.С., Корнелл Г. В«Java 2. Том 1. Основи В», 7-е вид.