„Здрасти, Амиго. Отдавна не сме се виждали.“
„Здрасти, Билаабо. За Howво ще говориш?“
"Днес ще ви разкажа за работата с файлове. Java има специален клас (File), който можете да използвате за управление на файлове на твърд диск. За управление на съдържанието на file има други класове: FileInputStream, FileOutputStream и т.н. "
„Интересно. Но когато казвате „управление на файлове“, Howво имате предвид?“
„Точно това ще обясня сега. Файловете могат да се създават, изтриват, преименуват и много повече. Можете да предадете File обект на практически всеки клас, който работи с (чете, пише, променя) съдържанието на файл . Например:"
FileInputStream input = new FileInputStream("c:/path/a.txt");
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);
"Но вторият вариант е по-дълъг. Все още не разбирам защо имаме нужда от тези файлови обекти."
„За този конкретен пример сте прав. „Това не е пример за това How трябва да го направите, а по-скоро How можете да го направите.
Но представете си, че трябва да покажете списък с всички файлове, намиращи се в определена директория. Ето How може да се направи това с помощта на файлови обекти:"
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
" listFiles() метод ли е , който връща списък с файлове в папката, обозначена с «c:/path/»?"
"Да. Но програмистите обикновено казват "директория". Терминът "папка" се използва сравнително наскоро, но по принцип и двата термина са правилни и можете да кажете, който предпочитате."
"ОК. И Howво прави getName ()? Връща името на file? Какво точно е включено в името? Пълното име, включително пътя, or само името на самия файл?"
„Само името на самия файл. За пълния път има file.getAbsolutePath().“
„И така, Howви други методи има класът File?“
"Погледни това:"
Метод | Описание |
---|---|
boolean isDirectory() |
Файловият обект директория ли е? |
boolean isFile() |
Обектът файл ли е? |
long length() |
Връща размера/дължината на file в byteове. |
boolean createNewFile() |
Създава нов, празен файл, ако файл с това име все още не съществува. |
boolean mkdir() |
Създава директория. Името «mkdir» идва от «make directory». |
boolean mkdirs() |
Създава директория и всички нейни поддиректории. |
boolean delete() |
Изтрива file, свързан с обекта. Ако обектът е директория, тогава директорията се изтрива само ако в нея няма файлове. |
void deleteOnExit() |
Добавя file към специален списък с файлове, които ще бъдат автоматично изтрити, когато програмата излезе. |
File createTempFile( String prefix, String suffix, File directory) |
Създава временен файл с произволно генерирано уникално име, нещо като «dasd4d53sd». Допълнителни параметри са префикс и суфикс на име. Ако директория не е посочена, тогава файлът се създава в специална директория на OS за временни файлове. |
boolean exists() |
Връща true, ако файл със същото име съществува на твърдия диск. |
String getAbsolutePath() |
Връща пълния път на file с всичките му поддиректории. |
String getCanonicalPath() |
Връща пътя на каноничния файл. Например преобразува пътя «c:/dir/dir2/../a.txt» в «c:/dir/a.txt» |
String[] list() |
Връща масив от имена на файлове, съдържащи се в директорията, представена от текущия обект. |
File[] listFiles() |
Връща масив от файлове, съдържащи се в директорията, представена от текущия обект File. |
long getTotalSpace() |
Връща общото пространство (брой byteове) на диска, на който се намира файлът. |
long getFreeSpace() |
Връща количеството свободно пространство (брой byteове) на диска, на който се намира файлът. |
boolean renameTo(File) |
Преименува file, т.е. съдържанието на file всъщност получава ново име. С други думи, можете да преименувате файл «c:/dir/a.txt» на «d:/out/text/b.doc». |
String getName() |
Връща само името на file без пътя. |
String getParent() |
Връща само пътя (директорията) към текущия файл, без самото име. |
Path toPath() |
Връща обект Path, който съответства на текущия обект File. |
„Уау! Не е много малък списък, а? И изглежда, че можете да правите доста с него: да създавате и изтривате файлове, да ги преименувате,...“
„Значи, за да получа директорията на текущия файл, трябва да извикам getParent()?“
„Да, но той връща String ― пътя на file ― не File обект. Всъщност класът File дублира почти всички свои методи: едната version връща String, другата ― File обект. Вижте го:“
File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();
Ако имате String с пътя на file и имате нужда от File обект, тогава използвайте конструктора. Ако ситуацията е обратна (имате File обект, но имате нужда от String), тогава използвайте getAbsolutePath (). Например:"
String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();
"Схванах го."
"Страхотно. Тогава ето една малка задача за вас: покажете имената на всички файлове, намиращи се в същата директория като текущия файл."
„Нищо не може да бъде по-лесно. Ето, вижте:“
//Some file
File originalFile = new File("c:/path/dir2/a.txt");
//An object representing the directory
File folder = originalFile.getParentFile();
//Print the file list on screen
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
"Хмм. Правилно."
„Но е малко объркващо, че един и същи клас ― File ― се използва Howто за file, така и за директорията. Това не ми се струва много логично.“
„Така се получи по исторически причини. Преди директорията беше специален „празен“ файл на диска. Разбира се, сега много се е променило, но не всичко. Това е всичко, което имам днес.“
— Благодаря за интересния урок, Билаабо.
GO TO FULL VERSION