Клас File
На відміну від більшості класів введення/виводу, клас File працює не з потоками, а безпосередньо з файлами.
Цей клас дає змогу отримати інформацію про файл:
• права доступу;
• час та дата створення;
• шлях до каталогу.
А також здійснювати навігацію ієрархіями підкаталогів - import java.io.File;
Потік - Stream
Потік – це абстрактне значення джерела або приймача даних, які спроможні обробляти інформацію.
У програму йде вхідний потік (input stream) символів Unicode чи просто байтів, який сприймається у програмі методами read().
З програми методами write() чи print(), println() виводиться вихідний потік (output stream) символів або байтів.
Водночас неважливо, куди спрямований потік: на консоль, на принтер, у файл або в мережу, методи write() і print() нічого про це не знають.
Повне ігнорування особливостей пристроїв введення/виводу дуже сповільнює передання інформації.
Клас System
У класі System визначено 3 потоки статичними полями:
• in (називається стандартне введення stdin);
• out (називається стандартне введення stdiout);
• err (називається стандартне введення stderr).
Потоки out, err
Потоки out та err – це екземпляри класу Printstream, який організовує вихідний потік байтів.
• Ці екземпляри виводять інформацію на консоль методами print(), println() та write().
• Потік err призначений для виведення системних повідомлень програми: трасування, повідомлень про помилки або про виконання якихось етапів програми.
Потік in – це екземпляр класу InputStream.
• Він призначений на клавіатурне введення з консолі методами read().
• Клас InputStream абстрактний, тому реально використовується якийсь із його підкласів.
Абстрактні класи
На чолі ієрархії чотири класи, які пов'язують програму з областю оперативної пам'яті, що безпосередньо розширює клас Object:
• Reader – абстрактний клас, у якому зібрані найзагальніші методи символьного введення.
• Writer – абстрактний клас, у якому зібрані найзагальніші методи символьного виведення.
• InputStream – абстрактний клас із загальними методами байтового введення.
• OutputStream – абстрактний клас із загальними методами байтового виведення.
Методи класу Reader
• abstract void close() закриває вхідний потік. Наступні спроби читання передадуть виключення IOException.
• void mark(int readLimit) поміщає мітку у поточну позицію у вхідному потоці.
• boolean markSupported() повертає true, якщо потік підтримує методи mark() і reset().
• int read() повертає цілочисельне представлення наступного доступного символу викликаного вхідного потоку. Після досягнення кінця файлу повертає значення -1. Є й інші перевантажені версії методу.
• boolean ready() повертає значення true, якщо наступний запит не буде очікувати.
• void reset() скидає покажчик введення у раніше встановлену позицію мітки.
• logn skip(long charCount) пропускає вказану кількість символів введення, повертаючи кількість дійсно пропущених символів.
Методи класу Writer
У разі помилок усі методи класу передають виняток IOException:
• Writer append(char c) додає символ наприкінці вихідного потоку. Повертає посилання на викликаний потік.
• Writer append(CharSequence csq) додає символи в кінець викликаного вихідного потоку. Повертає посилання на викликаний потік.
• Writer append(CharSequence csq, int start, int end) додає діапазон символів наприкінці викликаного вихідного потоку. Повертає посилання на викликаний потік.
• abstract void close() закриває викликаний потік.
• abstract void flush() фіналізує вихідний стан так, що всі буфери очищаються.
• void write(int oneChar) записує єдиний символ у викликаний вихідний потік. Є й інші перевантажені версії методу.
Методи класу InputStream
• int available() повертає кількість байтів введення, доступні в цей момент для читання.
• close() закриває джерело введення. Наступні спроби читання передадуть виключення IOException.
• void mark(int readlimit) поміщає мітку в поточну точку вхідного потоку, яка залишається коректною доти, доки не буде прочитано readlimint байт.
• boolean markSupported() повертає true, якщо методи mark() та reset() підтримуються потоком.
• int read() повертає цілочисельне представлення наступного доступного байта в потоці. За досягнення кінця файлу повертається значення -1.
• int read(byte[] buffer) намагається читати байти у буфер, повертаючи кількість прочитаних байтів. Після досягнення кінця файлу повертає значення -1.
• int read(byte[] buffer, int byteOffset, int byteCount) намагається читати до byteCount байт у buffer, починаючи зі зміщення byteOffset. Після досягнення кінця файлу повертає -1.
• reset() скидає вхідний покажчик у раніше встановлену мітку.
• long skip(long byteCount) пропускає byteCount байт введення, повертаючи кількість проігнорованих байтів.
Методи класу OutputStream
• int close() закриває вихідний потік. Наступні спроби запису передадуть виключення IOException.
• void flush() фіналізує вихідний стан, очищуючи всі буфери виводу.
• abstract void write (int oneByte) записує єдиний байт у вихідний потік.
• void write (byte[] buffer) записує повний масив байтів у вихідний потік.
• void write (byte[] buffer, int offset, int count) записує діапазон з count байт з масиву, починаючи зі зміщення offset.
Обробка рядків (class String)
Кожен рядок, створюваний за допомогою оператора new або за допомогою літералу (укладений у подвійні апострофи), є об'єктом класу String.
Особливістю об'єкта класу String є те, що його значення не може бути змінене після створення об'єкта за допомогою будь-якого методу класу, оскільки будьяка зміна рядка призводить до створення нового об'єкта
String s1 = "I love Java"; String s2 = new String("I love Java ");
Конструктори класу String
Клас String підтримує кілька конструкторів, наприклад (список неповний) :
• String();
• String(String str);
• String(byte asciichar[ ]);
• String(char[ ] unicodechar);
• String(byte[] bytes);
• String(StringBuffer sbuf);
• String(StringBuilder sbuild).
Методи класу String
• String concat(String s) або «+» – злиття рядків;
• boolean equals(Object ob), boolean equalsIgnoreCase(String s) – порівняння рядків з урахуванням та без урахування регістру відповідно;
• int compareTo(String s), int compareToIgnoreCase(String s)
– лексикографічне порівняння рядків з урахуванням і без урахування регістру.
- Метод здійснює віднімання кодів символів, що викликає і передається в метод рядків та повертає ціле значення. - Метод повертає значення нуль у разі, коли equals() повертає значення true.
• boolean contentEquals(StringBuffer ob) – порівняння рядка та вмісту об'єкта типу StringBuffer;
• String substring(int n, int m) – вилучення з рядка підрядка довжини m-1, починаючи з позиції n. Нумерація символів у рядку починається з нуля.
Методи класу String
• String substring(int n) – вилучення з рядка підрядка, починаючи з позиції n;
• int length() – визначення довжини рядка;
• int indexOf(char ch) – визначення позиції символу у рядку;
• static String valueOf(значення) – перетворення змінної базового типу до рядка;
• String toUpperCase(), String toLowerCase() – перетворення всіх символів викликаного рядка у верхній/нижній регістр;
• String replace(char с1, char с2) – заміна у рядку всіх входжень першого символу другим символом;
• String intern() заносить рядок у «пул» літералів і повертає його об'єктне посилання. Цей метод корисний, якщо необхідно використовувати == замість equals.
Методи класу String
• String trim() – видалення всіх прогалин на початку та наприкінці рядка;
• char charAt(int position) – повернення символу із зазначеної позиції (нумерація з нуля);
• boolean isEmpty() повертає true, якщо довжина рядка дорівнює 0;
• byte[ ] getBytes() – вилучення символів рядка в масив байт або символів;
• void getChars (int srcBegin, int srcEnd, char [] dst, int dstBegin) – копіювання рядка в масив dst.
Методи класу String
• static String format(String format, Object... args),
• static String format(Locale l, String format, Object... args)
Приклад:
String aString = "world";
int aInt = 20;
String.format("Hello, %s on line %d", aString, aInt );
На екрані:
Hello, world on line 20
• String[ ] split(String regex),
String[ ] split(String regex, int limit) – пошук входження в рядок заданого регулярного виразу (розділювача) і поділ вихідного рядка відповідно до цього на масив рядків.
Класи StringBuilder, StringBuffer
Класи StringBuilder і StringBuffer є «близнюками» та за своїм призначенням близькі до класу String, але, на відміну від останнього, вміст і розміри об'єктів класів StringBuilder і StringBuffer можна змінювати.
Основною та єдиною відмінністю StringBuilder від StringBuffer є потокобезпека останнього.
За допомогою відповідних методів і конструкторів об'єкти класів StringBuffer, StringBuilder та String можна перетворювати один на одного.
Конструктор класу StringBuffer (як і StringBuilder) може приймати як параметр об'єкт String.
Методи класів StringBuilder, StringBuffer
• void setLength(int n) – встановлення розміру буфера;
• void ensureCapacity(int minimum) – встановлення гарантованого мінімального розміру буфера. Варто зауважити, що під час виклику методу trimToSize() рядок буде урізаний до свого фактичного розміру, оскільки значення minimum у класі StringBuilder чи StringBuffer не зберігається.
• int capacity() – повернення поточного розміру буфера;
• StringBuffer append(параметри(наприклад double d)) – додавання до вмісту об'єкта рядкового представлення аргументу, який може бути символом, значенням базового типу, масивом і рядком;
• StringBuffer insert(параметри) – вставлення символу, об'єкта чи рядка у вказану позицію;
• StringBuffer deleteCharAt(int index) – видалення символу;
• StringBuffer delete (int start, int end) – видалення підрядка;
• StringBuffer reverse() – звернення вмісту об'єкта. Також наявні методи аналогічні класу String length(), replace() та інші.
Q&A
Дякую всім за заняття!🙌🏻
❗️🎓Тема уроку: 3. IO & Strings
Нагадую, що дедлайн здачі домашніх робіт – до наступного уроку.
Якщо виникають складнощі, пишіть, допоможу із задоволенням 😌
Запис лекції тренер опублікує трохи пізніше 🖥
Не забудьте повторити матеріал та підготуватися до наступного уроку📚
Успіху і до зустрічі!🤩
PRO. 1
Марка автомобіля
Виробник
Тип
Рік випуску
Дата реєстрації
Вивести відомості про машини марки «Toyota», зареєстровані до 2007-го року.
PRO. 2
Прізвище
Ім'я
По батькові
Посада
Зарплата
Дата народження
Вивести відомості про працівників, які народилися в травні.
PRO. 3
No поїзда
Час прибуття
Час відбуття
Напрямок
Відстань
Вивести середню швидкість кожного поїзда.