— Привіт, Аміго. Давно не бачилися.
— Привіт, Білаабо. Про що розповідатимеш?
— Сьогодні я розповім про роботу з файлами. У Java є спеціальний клас (File), за допомогою якого можна керувати файлами на диску комп'ютера. Для того, щоб керувати вмістом файлів, є інші класи: FileInputStream, FileOutputStream,
— Цікаво. А коли ти кажеш "керувати файлами", що ти маєш на увазі?
— Саме зараз і розповім. Файли можна створювати, видаляти, перейменовувати та ще багато чого. Практично у всіх класах, які працюють (читають, пишуть, змінюють) з вмістом файлу, можна передавати об'єкт класу File. Приклад:
FileInputStream input = new FileInputStream("< span class="text-green">c:/path/a.txt");
File file = new< /strong> File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);
— Але в другому випадку довше виходить. Так і не зрозумів – навіщо ці файли потрібні.
— Для цього конкретного випадку – так. Це не приклад, як треба робити, а скоріше – як можна.
Але уяви, що тобі потрібно вивести на екран список всіх файлів, які знаходяться в певній директорії (папці). Ось як це можна зробити за допомогою файлів:
File folder = new File("< span class="text-green">c:/path/");
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
— listFiles() – це метод, який повертає список файлів у папці з ім'ям «c:/path/»?
— Так. Хоча програмісти зазвичай кажуть «директорія» чи «каталог». Назва «папка» стала вживатися зовсім недавно, але, в принципі, всі вони вірні, і ти можеш говорити, як тобі зручніше.
— Ок. А що getName() робить? Видає ім'я файлу? І яке саме ім'я? Повне разом із шляхом або тільки ім'я самого файлу?
— Тільки ім'я файлу. Для повного є file.getAbsolutePath()
— А які ще методи мають клас File?
— Ось, дивись:
Метод | Опис |
---|---|
boolean isDirectory() |
Чи є об'єкт файлу директорією |
boolean isFile() |
Чи є об'єкт файлом |
long length() |
Повертає розмір/довжину файлу в байтах. |
boolean createNewFile() |
Створює файл. Якщо файл вже був, повертає false. |
boolean mkdir() |
Створює директорію. Назва mkdir походить від «make directory». |
boolean mkdirs() |
Створює директорію та всі піддиректорії. |
boolean delete() |
Видаляє файл об'єкта на диску. Якщо об'єкт – директорія, то тільки якщо в ній немає файлів. |
void deleteOnExit() |
Додає файл до спеціального списку файлів, які будуть автоматично видалені під час закриття програми. |
File createTempFile( String prefix, String suffix, File directory) |
Створює «тимчасовий файл» — файл із випадково згенерованим унікальним ім'ям – що-типу «dasd4d53sd». Додаткові параметри – префікс до імені, суфікс (закінчення). Якщо директорія не вказана, файл створюється в спеціальній директорії ОС для тимчасових файлів |
boolean exists() |
Повертає true, якщо файл з такою назвою існує на диску комп'ютера. |
String getAbsolutePath() |
Повертає повний шлях файлу з усіма піддиректоріями. |
String getCanonicalPath() |
Повертає канонічний шлях файлу. Наприклад, перетворює шлях "c:/dir/dir2/../a.txt" до шляху "c:/dir/a.txt" |
String[] list() |
Повертає масив імен файлів, які містяться в директорії, якою є поточний об'єкт-файл. |
File[] listFiles() |
Повертає масив файлів, які містяться в директорії, якою є поточний об'єкт-файл. |
long getTotalSpace() |
Повертає розмір диска (кількість байт), на якому розташований файл. |
long getFreeSpace() |
Повертає кількість вільного місця (кількість байт) на диску, на якому розташований файл. |
boolean renameTo(File) |
Перейменовує файл - вміст файлу фактично отримує нове ім'я. Тобто. можна перейменувати файл "c:/dir/a.txt" на "d:/out/text/b.doc". |
String getName() |
Повертає лише ім'я файлу, без дороги. |
String getParent() |
Повертає лише шлях (директорію) до поточного файлу, без імені. |
Path toPath() |
Повертає об'єкт Path, який відповідає поточному об'єкту File. |
— Нічого собі! А великий такий перелік вийшов. Та й начебто можна досить багато зробити за допомогою нього: створювати, видаляти файли, перейменовувати…
А щоб отримати директорію поточного файлу, треба викликати getParent()?
— Ага, але він поверне не об'єкт-файл, а рядок шлях до файлу. Практично у класу File багато методів дубльовані: одна версія повертає String, друга File. Ось дивись:
File file = новий файл("c:/path/a.txt");
String directory = file.getParent();
File file = новий файл("c:/path/a.txt");
File directory = file.getParentFile();
Якщо у тебе є рядок із шляхом до файлу, а треба об'єкт File, то скористайся конструктором. Якщо ж навпаки – є об'єкт File, а потрібний рядок – використовуй getAbsolutePath(). Приклад:
String path = "c:/a.txt";
File file = новий File(path) ;
File file = new File ("c:/a.txt"); String path = file.getAbsolutePath();
pre>— Зрозумів.
— Чудово. Тоді ось тобі маленьке завдання – виведи імена всіх файлів, які є в тій директорії, що й поточний файл.
— Немає нічого простішого, ось дивись:
Код//якийсь поточний файл File originalFile = new File("c:/path/dir2/a.txt"); //об'єкт-директорія File folder = originalFile.getParentFile(); //друк списку файлів на екран for (File file : folder.listFiles()) { System.out.println(file.getName()); }
— Гм. Правильно.
— А то! Трохи плутає, що і для файлу і для директорії використовується той самий клас – File. Як це не дуже логічно, мені здається.
— Так склалося історично. Раніше директорія була спеціальним "порожнім" файлом на диску. Зараз уже, звичайно, багато що змінилося, але не скрізь. У мене сьогодні все.
— Дякую, за чудову лекцію, Білаабо.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ