Basic I/O. Базовий введення/висновок в Java

Під потоком розуміють послідовність байтів.

Вхідний потік переносить дані з джерела в програму, що виходить – навпаки.

Байтові потоки (класи) походять від InputStream і OutputStream. Один байт зчитується в одиницю времені. После закінчення роботи потоку, його обов'язково потрібно закрити.

Байтові потоки обслуговують введення/висновок низького рівня. У цих випадках їх і слід використовувати.

Для роботи з символами исползуют символьні потоки (character stream).

Байтові і символьні потоки можна використовувати спільно. Байтові відповідають за завантаження в програму послідовності байтів, а символьні потоки зайняті перетворенням між байтами і символами.

Символьні потоки здатні зчитувати одразу цілий рядок.

Потоки можна буферізіровать, тобто читання або запис виконувати не прямо, що підвищує швидкість. Спочатку завантаження йде в буфер, коли він буде заповнений, то з нього запитується відразу весь обсяг інформаціі.Чтоби використовувати буферізіровать потоки, треба використовувати звичайні потоки як аргумент буферізіровать.

Файловий ввід/вивід здійснюється класами FileInputStream і FileOutputStream. Для текстових файлів використовують класи FileReader і FileWriter.

У прикладі створимо файл InputFile, завантажимо в нього текст, вивантажимо вміст цього файлу в інший файл OutputFile.

У прикладі спочатку створюємо файл InputFile.doc в конструкторі:

fw = new FileWriter ("H:\\InputFile.doc", false);

другий аргумент говорить про те, що файл буде переписаний заново, якщо цей аргумент дорівнює true, то запис додається в кінець файлу. Тепер у файл можна додати рядок:

fw.write ("This is a new file.");

Файл готовий. Обов'язково слід закрити потік FileWriter. Робимо це в блоці finally.

Далі розглянемо порядок використання потоків FileInputStream і FileOutputStream. Читаємо інфомацию з щойно створеного файлу так:

ism = new FileInputStream ("H:\\InputFile.doc");

Створюємо новий файл OutputFile.doc для перекачування в нього інформації з InputFile.doc:

os = new FileOutputStream ("H:\\OutputFile.doc");

Перекидання інформації робимо в циклі:

int cur; while ((cur = ism.read ())! = -1) { os.write (cur); }

де -1 вказує на досягнення кінця потоку.

Обов'язково слід закрити потоки FileInputStream і FileOutputStream. Робимо це в блоці finally:

finally { if (ism! = null) { ism.close (); } if (os! = null) { os.close (); } }