МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Потоки та робота із файлами у Java
Методичні вказівки
до виконання лабораторної роботи №6
з курсу “Об’єктно-орієнтоване програмування”
для студентів базового напрямку
6.0804 “Комп’ютерні науки”
ЗАТВЕРДЖЕНО
на засіданні кафедри “Системи автоматизованого проектування” Протокол № 1від 30.08.2010
ЛЬВІВ 2010 Мова програмування Java. Методичні вказівки до виконання лабораторної роботи №06 “Потоки та робота із файлами у Java” з курсу: “Об’єктно-орієнтоване програмування” для студентів базового напрямку 6.0804 “Комп’ютерні науки”.
Укладачі: Каркульовський В.І., доцент, к.т.н.
Керницький А.Б., ст.викл., др.інж.
Відповідальний за випуск:
Рецензенти:
1. МЕТА РОБОТИ
Одержати навички .
2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. ВВЕДЕННЯ ТА ВИВЕДЕННЯ В JAVA
У багатьох випадках потрібно виводити результати на принтер, у файл, базу даних або передавати по мережі. Вхідні дані теж часто приходиться завантажувати із файла, бази даних або із мережі. Для того щоб абстрагуватись від особливостей конкретних пристроїв введення/виведення, в Java використовується поняття потоку (stream). Вважається, що у програму іде вхідний поток (input stream) символів Unicode або просто байтів, що сприймається в програмі методами read(). Із програми методами write() або print (), println() виводиться вихідний потік (output stream) символів або байтів. При цьому не має значення куди направлений потік: на консоль, на принтер, у файл або в мережу, методи write() і print() нічого про це не знають.
Можна уявити собі потік як трубу, по якій в одному напрямку послідовно "течуть" символи або байти, один за одним. Методи read() , write() , print(), println() взаємодіють з одним кінцем труби, другий кінець з’єднується з джерелом або приймачем даних - конструкторами класів, в яких реалізовані ці методи. Звичайно, повне ігнорування особливостей пристроїв введення/виведення сильно сповільнює передачу інформації. Тому в Java виділяється файлове введення/виведення, виведення на друк, виведення у мережевий потік.
Три потоки визначені у класі System статичними полями in, out і err. Їх можна використовувати без будь-яких додаткових визначень. Вони називаються відповідно стандартним введенням (stdin), стандартним виведенням (stdout) і стандартним виведенням повідомлень (stderr). Ці стандартні потоки можуть бути зєднані з різними конкретними присторями введення/виведення. Потоки out і err — це екземпляри класу Printstream, який організовує вихідний потік байтів. Ці екземпляри виводять інформацію на консоль методами print(), println() i write(), яких в класі Printstream є близько двадцати для різних типів аргументів.
Потік err призначений для виведення системних повідомлень програми: трасування, повідомлень про помилки або про виконання певних етапів програми. Такі дані звичайно заносяться в спеціальні журнали, log-файли, а не виводяться на консоль. В Java є засоби перепризначення потоку, наприклад, з консолі у файл.
Потік in — це екземпляр класу inputstream. Він призначений для клавіатурного введення з консолі методами read(). Клас inputstream є абстрактним, тому реально використовується хтось із його підкласів.
Поняття потоку виявилось настільки зручним у програмуванні введення/виведення, що в Java передбачена можливістьсть створення потоків, які направляють символи або байти не на зовнішній пристрій, а в масив або із масиву, тобто які зв’язують програму з областю оперативної пам’яті. Більше того, можна створити потік, зв’язаний з рядком типу string, що знаходиться в оперативній памяті. Крім того, можна створити канал (pipe) обміну інформацією між підпроцесами.
Ще один вид потоку — потік байтів, який складає об’єкт Java. Його можна направити у файл або передати по мережі, потім відновити в оперативній пам’яті. Ця операція називається серіалізацією (serialization) об’єктів.
Методи організації потоків зібрані у класи пакета java.io. Крім класів, які організують потік, в ...