Клас File

містить стандартні засоби для роботи з іменами файлів Його методи дозволяють розділяти повні імена, що включають шлях, на складові частини і запитувати у файлової системи інформацію про файлах

Обєкт File зазвичай повязаний з повним імям файлу, причому необовязково існуючого Наприклад, щоб зясувати, чи представляє деяке імя існуючий в системі файл, слід спочатку створити обєкт File для даного імені, після чого викликати для цього обєкта метод exists

Повне імя / У цьому розділі слід відрізняти повне імя файлу від імені обєкта класу файл – Прямуючи перев / ділиться на дві частини: одна визначає каталог (або папку), а інша – власне файл Для розділення компонентів шляху служить символ, що зберігається як значення типу char в статичному полі separatorChar або значення типу String в статичному полі separator Останнє входження цього символу в дорогу відділяє каталог від імені файлу

Обєкти File створюються одним з трьох конструкторів:

public File(String path)

Створює обєкт File для роботи з заданим файлом path Якщо параметр дорівнює null,

збуджується виключення NullPointerException public File(String dirName, String name)

Створює обєкт File для роботи з файлом name, що знаходяться в каталозі dirName Якщо параметр dirName дорівнює null, використовується тільки компонент name В іншому випадку

виклик конструктора еквівалентний наступному: File (dirname + Fileseparator + name)

public File(File fileDir, String name)

Створює обєкт File для заданого обєкта-каталогу fileDir типу File і файлу з імям

name Виклик конструктора еквівалентний наступному: File (fileDirgetPath (), name)

Чотири методи get призначені для отримання інформації про компоненти повного імені обєкта File У наведеному нижче фрагменті програми викликається кожного з цих методів:

File src = new File(&quotok&quot, &quotFileMethods&quot) Systemoutprintln(&quotgetName() = &quot + srcgetName()) Systemoutprintln(&quotgetPath() = &quot + srcgetPath()) Systemoutprintln(&quotgetAbsolutePath()  = &quot

+ srcgetAbsolutePath()) Systemoutprintln(&quotgetParent() = &quot + srcgetParent())

Ось як виглядає результат роботи програми:

getName() = FileMethods getPath() = ok/FileMethods

getAbsolutePath()  = /vob/java_prog/src/ok/FileMethods getParent() = ok

Кілька методів повертають логічні значення, які характеризують файл,

представлений обєктом File:

exists: повертає true, якщо файл існує у файловій системі canRead: повертає true, якщо файл існує і доступний для читання canWrite: повертає true, якщо файл існує і доступний для запису

isFile: повертає true, якщо файл існує і є звичайним (тобто не

каталогом або файлом особливого типу)

isDirectory: повертає true, якщо файл є каталогом

isAbsolute: повертає true, якщо шлях представляє собою повне імя файлу

містить і інші корисні методи:

public long lastModified()

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

public long length()

Повертає довжину файлу в байтах public boolean mkdir()

Створює каталог і повертає true у разі успіху public boolean mkdirs()

Створює всі каталоги, що входять в заданий шлях, і повертає true у разі успіху

Метод забезпечує виникнення конкретного каталогу, навіть якщо для цього буде потрібно створити інші, не існуючі в даний момент каталоги, які знаходяться вище в ієрархії

public boolean renameTo(File  new_name) Перейменовує файл і повертає true у разі успіху public boolean delete()

Видаляє файл або каталог, представлений обєктом File, і повертає true у разі успіху

public String[] list()

Повертає список файлів в каталозі Якщо обєкт File представляє собою не каталог, а щось інше, передається null в іншому випадку повертається масив з іменами файлів Список містить всі файли каталогу, за винятком еквівалентів .” і ..” (поточний і батьківський каталоги відповідно)

public String[] list(FilenameFilter filter)

Використовує заданий фільтр для складання списку файлів в каталозі (див нижче розділ

“Интерфес Filename Filter)

Перевизначення метод Fileequals заслуговує особливої ​​згадки Два обєкти File вважаються рівними в тому випадку, якщо збігаються їх повні імена, а не в тому, якщо вони представляють один і той же файл в системі Метод Fileequals не може застосовуватися для зясування того, чи відповідають два обєкти File одного й того ж файлу

Для створення файлів використовуються обєкти класів FileOutputStream або

RandomAccessFile, а не обєкти класу File

Нарешті, залишається згадати, що символ FilepathSeparatorChar і рядок FilepathSeparator представляють символ, що розділяє каталоги або файли в повному імені Наприклад, в системі UNIX для розділення компонентів повного імені використовується двокрапка: . :/ bin :/ usr / bin. Отже, в системі UNIX символ pathSepar a torChar являє собою двокрапка

Повне імя файлу зберігається в захищеному строковому поле з імям String Підкласи File можуть при необхідності безпосередньо звертатися до цього поля або модифікувати його

Вправа 119

Напишіть метод, який отримує як параметр повне імя файлу і виводить всю інформацію про відповідному файлі (якщо він існує)

1119 Інтерфейс FilenameFilter

Інтерфейс FilenameFilter дозволяє створювати обєкти, які фільтрують списки файлів і видаляють з них непотрібні Він містить всього один метод:

boolean accept(File dir, String name)

Повертає true, якщо файл з імям name в каталозі dir повинен входити в відфільтрований список

У наступному прикладі обєкт FilenameFilter використовується для того, щоб в список включалися тільки каталоги:

import javaio*

class DirFilter implements FilenameFilter {

public boolean accept(File dir, String name) {

return new File(dir, name)isDirectory()

}

public static void main(String[] args) { File dir = new File(args[0])

String[] files = dirlist(new DirFilter()) Systemoutprintln(fileslength + &quotdir(s):&quot) for (int i = 0 i &lt&lt fileslength i++)

Systemoutprintln(&quot\t&quot + files[i])

}

}

Спочатку ми створюємо обєкт File, який являє собою каталог, вказаний в командному рядку Потім ми конструюємо обєкт DirFilter і передаємо його як параметр методу list Для кожного імені, вхідного в каталог, list викликає метод accept обєкта-фільтра і включає імя в список лише в тому випадку, якщо обєкт-фільтр повертає true Для нашого методу accept значення true показує, що імя відповідає каталогу

Вправа 1110

За допомогою інтерфейсу FilenameFilter напишіть програму, яка отримує в якості параметрів імя каталогу і розширення файлу і виводить список всіх файлів каталогу з заданим розширенням

1120 Класи IOException

Для повідомлень про всі помилки введення / виводу, виявлених класами пакета javaio, повинні використовуватися винятку, які є підкласом IOException Більшість класів проектувалося для цілей загального призначення, так що основна частина винятків також носить універсальний характер Наприклад, методи класу InputStream, збуджуючі IOException, не можуть заздалегідь передбачити, які саме виникнуть винятку, так як кожен конкретний потоковий клас може порушити деякий підклас IOException, сигналізуючи тим самим про помилку, що відноситься лише до цього потоку Наприклад, фільтруючі вхідні і вихідні потоки лише передають без обробки виключення від обєктів, на основі яких вони створювалися і які можуть являти собою потоки будь-якого типу

У пакеті javaio використовуються чотири підкласу IOException:

EOFException extends IOException

Збуджується інтерфейсами потоків даних при досягненні кінця введення, як запланованому, так і несподіваному

FileNotFoundException extends IOException

Збуджується конструкторами файлових потоків, якщо файл, імя якого передається як параметр, не знайдений

InterruptedIOException extends IOException

Збуджується будь-яким потоком, коли в операцію введення / виведення втручається переривання програмного потоку (див розділ Переривання потоку) Фактично операції введення / виводу переводять виняток InterruptedException в InterruptedIO Exception

UTFDataFormatException extends IOException

Збуджується методом DataInputStreamreadUTF, якщо прочитується рядок має невірний синтаксис UTF

Якщо не вважати цих конкретних винятків, то для повідомлень про всі особливих станах в javaio використовується виняток IOException, що містить рядок з описом конкретної помилки – наприклад, використання Несполучені конвеєрного потоку або спроба відкату на декілька символів назад в потоці PushbackInputStream

Глава 12

СТАНДАРТНІ ДОПОМІЖНІ ЗАСОБИ

Компютери марні –

вони можуть тільки давати відповіді

Пабло Пікассо

Пакет javautil містить ряд стандартних допоміжних інтерфейсів і класів Деякі з них вже використовувалися в попередніх розділах – наприклад, класи Date і Hashtable Є й інші корисні інтерфейси і класи:

Колекції:

BitSet: бітовий вектор з динамічною зміною розміру Enumeration: інтерфейс, який повертає обєкт, який використовується для

перерахування набору обєктів (наприклад, елементів, що містяться в конкретній хеш-таблиці)

Vector: вектор, що складається з елементів типу Object, з динамічною зміною розміру

Stack: розширення класу Vector, в якому додані методи для роботи з найпростішим стеком LIFO (останнім прийшов, першим вийшов)

Dictionary: абстрактний клас, що містить алгоритми для роботи з парами ключ / значення

Hashtable: реалізація Dictionary, в якій для зіставлення ключа із значенням використовується хеш-код

Properties: розширення Hashtable, в якому рядкові ключі зіставляються із строковими значеннями

Концепції проектування:

Observer / Observable: за допомогою цієї пари інтерфейс / клас ви можете зробити свій обєкт спостережуваним (Observable) – закріпити за ним один або більше обєктів-спостерігачів (Observer), які будуть сповіщатися в тому випадку, якщо з контрольоване обєктом відбувається щось цікаве

Інше:

Date: робота з датами з точністю до однієї секунди

Random: обєкти, що генерують послідовності псевдовипадкових чисел

StringTok enizer: розподіл рядка на лексеми з урахуванням символів-обмежувачів За замовчуванням ними вважаються роздільники (whitespace)

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*