Імена. Каталоги. Клас File
Повне ім'я файлу складається з імені файлу як і імені каталогу, у якому розташовується цей файл. Прості імена файлів, наприклад data.dat або result.dat, використовуються лише для звернення до файлів, розташованих у поточному (або робочому) каталозі. До інших файлів слід звертатися із зазначенням повного імені, включаючи ім'я каталогу.
Існує можливість завдання або абсолютного імені файлу або відносного. Абсолютне ім'я вказує розташування файлу серед інших файлів, причому це ім'я незалежно від інших файлів чи каталогів. У ньому міститься інформація про директорію та просте ім'я файлу. Відносний шлях (відносне ім'я файлу) визначає шлях до файлу з поточного каталогу. Синтаксис файлів залежить від типу комп'ютера. Деякі приклади імен файлів розглянуті нижче:
? data.dat - на будь-якому комп'ютері, це ім'я файлу в поточному каталозі;
? /home/eck/ j ava/examples/data. dat - абсолютний шлях на системі UNIX;
? C: \ eck \ java \ examples \ data.dat - абсолютний шлях для DOS і Windows;
? Hard Drive: j ava: examples: data, dat - ДЛЯ системи Macintosh OS 9 (Hard Drive - ім'я пристрою);
? examples/data.dat - відносний шлях на UNIX;
? examples\data.dat - відносний шлях для DOS та Windows;
? examples: data. dat – відносний шлях для Macintosh.
Щоб у цьому уникнути проблем, викликаних відмінностями у платформах, у мові Java використовується клас java.io.Fiie. Об'єкт цього класу є файл, точніше не сам файл, а ім'я файлу. Сам файл може існувати, або існувати. Каталоги сприймаються так само, як і файли. Об'єкт типу File з рівним успіхом може представляти як файл, і каталог.
Об'єкт File створюється за допомогою конструктора File(string), якому як параметр передається шлях до файлу з ім'ям файлу. Ім'я може бути зазначено як у абсолютній, так і у відносній формі. Наприклад, New File ("data.dat") створює об'єкт типу File, який посилається на файл data.dat, розташований у поточному каталозі. Існує інший тип конструктора для створення об'єкта типу File, new File (File, String), У цьому конструкторі вказується два параметри. Перший - об'єкт типу File, який посилається на каталог, в якому розташований файл, ім'я файлу (просте) вказується у другому аргументі.
Об'єкт типу File має набір корисних методів. Нехай file це об'єкт типу File, перерахуємо деякі корисні методи при роботі з об'єктом типу File.
? file.exists - логічне значення. Повертає true, якщо файл із встановленим ім'ям файлу існує. Цей метод корисно використовувати в тому випадку, якщо ми бажаємо уникнути можливої втрати даних, записаних у існуючому файлі перед використанням FileWriter.
? fiie. isDirectory () - Логічне значення. Повертає true, якщо об'єкт вказує на каталог. Якщо об'єкт вказує на звичайний файл або якщо каталог із вказаним ім'ям не існує, повертає false.
? file.delete — видаляє файл, якщо файл існує.
? file, list — якщо об'єкт вказує на каталог, то функція повертає масив типу string п , в якому містяться імена файлів в даному каталозі. В іншому випадку повертає null.
Нижче наведено приклад програми (листинг 2.3), яка повертає імена всіх файлів, розміщених у вказаному користувачем каталозі (рис. 2.1):
Лістинг 2.3. Програма, яка виводить на екран список файлів у каталозі
import java.io.File; public class DirectoryList
public static void main(String[] args)
String directoryName; // ім'я каталогу, яке вводиться користувачем File directory; // Об'єкт типу File, що вказує на каталог
String[] files; // масив імен файлів у каталозі
TextlO.put ("wedite imya kataloga: "); directoryName = TextIO.getln().trim() ; directory = новий File(directoryName); if (directory.isDirectory() == false) < if (directory.exists() == false)
TextlO.putln("Такого kataloga net!"); else
TextlO.putln("Eto ne katalog.");
TextlO.putln("Spisok failov v katalogu V" + directory + for (int i = 0; i pos; i-) words[i] = words[i-1]; words[pos] = w; wordCount++;
Припустимо, наступний текст збережений у файлі input.txt:
Вікторіє, вітаю тебе з днем народження! Дозволь побажати тобі всього найкращого.
Запускаємо програму, вводимо імена, що запитуються (рис. 2.2). У результуючому файлі output.txt отримуємо список слів:

Мал. 2.2. Приклад організації роботи з файлами
int data = source.read(); if (data "); System.out.printIn(
"ili java CopyFile -f"); return;
створюємо потік введення, якщо з'являється помилка, зупиняємо виконання програми */
source = New FilelnputStream(sourceName);
catch (FileNotFoundException e)
System.out.println("Can't find file + sourceName+ ."); return;
якщо файл виводу вже існує і опція -f не задана, то виводимо повідомлення про помилку та припиняємо виконання програми */
System.out.printIn("Fail uzhe suschestvuet. Ispolzujte -f для perezapisi fajla.");
Створюємо потік виведення. У разі виникнення помилки пишемо повідомлення і припиняємо виконання програми. */ try
catch (IOException e)