20.5. Java – Класс File, его конструкторы и методы
В Java класс File представляет файлы и пути каталогов в абстрактной манере. Этот класс используется для создания, поиска, удаления файлов и каталогов и т.д.
Конструкторы
File-объект представляет собой фактический файл или каталог на диске. Ниже приведен список конструкторов для создания file-объекта.
№ | Конструктор и описание |
1 | File(File parent, String child) Конструктор создает новый экземпляр файла из родительского абстрактного пути и строки дочернего пути. |
2 | File(String pathname) Конструктор создает новый экземпляр файла, преобразовывая указанную строку pathname в абстрактный путь. |
3 | File(String parent, String child) Конструктор создает новый экземпляр файла из строки родительского пути и строки дочернего пути. |
4 | File(URI uri) Конструктор создает новый экземпляр файла, преобразовывая данный файл: URI в абстрактный путь. |
Методы
Если Вы используйте file-объекты, то у Вас есть под рукой список вспомогательных методов, которые можно использовать для управления файлами.
№ | Метод и описание |
1 | public String getName() Возвращает имя файла или каталога, по указанному абстрактному имени пути. |
2 | public String getParent() Возвращает строковый путь родителя абстрактного пути, или null, если путь не указывает родительский каталог. |
3 | public File getParentFile() Возвращает абстрактный путь родителя абстрактного пути, или null, если путь не указывает родительский каталог. |
4 | public String getPath() Преобразует абстрактный путь в строку. |
5 | public boolean isAbsolute() Провяет, является ли абстрактный путь абсолютным. Возвращает true, если абстрактный путь является абсолютным, иначе false. |
6 | public String getAbsolutePath() Возвращает строкой абсолютный путь. |
7 | public boolean canRead() Проверяет, может ли приложение прочитать файл, по указанному абстрактному имени пути. Возвращает true тогда и только тогда, когда файл, указанный в абстрактном пути, существует и может быть прочитан приложением; в противном случае false. |
8 | public boolean canWrite() Проверяет, может ли приложение изменять файл, по указанному абстрактному имени пути. Возвращает true тогда и только тогда, когда файловая система фактически содержит файл, по указанному абстрактному имени пути, и приложению разрешено записывать в файл; в противном случае false. |
9 | public boolean exists() Проверяет, существует ли файл или каталог, по указанному абстрактному имени пути. Возвращает true тогда и только тогда, когда существует файл или каталог, по указанному абстрактному имени пути; в противном случае false. |
10 | public boolean isDirectory() Проверяет, является ли файл, по указанному абстрактному имени пути, каталогом. Возвращает true тогда и только тогда, когда файл, обозначенный этим абстрактным именем, существует и является каталогом; в противном случае false. |
11 | public boolean isFile() Проверяет, является ли файл, по указанному абстрактному имени пути, нормальным файлом. Файл является нормальным, если он не является каталогом и, кроме того, удовлетворяет другим системным критериям. Любой файл без каталога, созданный приложением Java, гарантированно является нормальным файлом. Возвращает true тогда и только тогда, когда файл, обозначенный этим абстрактным пустым именем, существует и является нормальным файлом; в противном случае false. |
12 | public long lastModified() Возвращает время последнего изменения файла, по указанному абстрактному имени пути. Возвращает длинное значение, представляющее время последнего изменения файла, измеренное в миллисекундах с эпохи (00:00:00 GMT, 1 января 1970 г.) или 0L, если файл не существует или возникает ошибка ввода-вывода. |
13 | public long length() Возвращает длину файла, обозначенного этим абстрактным именем пути. Возвращаемое значение не указано, если путь указывает на каталог. |
14 | public boolean createNewFile() throws IOException Атомарно создает новый пустой файл, названный этим абстрактным именем пути, тогда и только тогда, когда файл с этим именем еще не существует. Возвращает true, если названный файл не существует и был успешно создан; false, если именованный файл уже существует. |
15 | public boolean delete() Удаляет файл или каталог, по указанному абстрактному имени пути. Если это имя пути обозначает каталог, каталог должен быть пустым, чтобы его можно было удалить. Возвращает true тогда и только тогда, когда файл или каталог успешно удалены; в противном случае false. |
16 | public void deleteOnExit() Просит, чтобы файл или каталог, обозначенные данным абстрактным пустым именем, были удалены при завершении работы виртуальной машины. |
17 | public String[] list() Возвращает массив строк, называющий файлы и каталоги в каталоге, обозначаемом этим абстрактным именем пути. |
18 | public String[] list(FilenameFilter filter) Возвращает массив строк, называющий файлы и каталоги в каталоге, обозначаемом этим абстрактным пустым именем пути, которое удовлетворяет указанному фильтру. |
19 | public File[] listFiles() Возвращает массив абстрактных путей, обозначающих файлы в каталоге, обозначаемом этим абстрактным именем пути. |
20 | public File[] listFiles(FileFilter filter) Возвращает массив абстрактных путей, обозначающих файлы и каталоги в каталоге, обозначаемом этим абстрактным пустым именем пути, которое удовлетворяет указанному фильтру. |
21 | public boolean mkdir() Создает каталог с именем этого абстрактного пути. Возвращает true тогда и только тогда, когда каталог был создан, в противном случае false. |
22 | public boolean mkdirs() Создает каталог с именем этого абстрактного пути, включая любые необходимые, но несуществующие родительские каталоги. Возвращает true тогда и только тогда, когда каталог был создан вместе со всеми необходимыми родительскими каталогами, в противном случае false. |
23 | public boolean renameTo(File dest) Переименовывает файл, обозначенный этим абстрактным пустым именем. Возвращает true тогда и только тогда, когда переименование выполнено успешно, в противном случае false. |
24 | public boolean setLastModified(long time) Устанавливает последней модификацией время файла или каталога с именем этого абстрактного пути. Возвращает true тогда и только тогда, когда операция выполнена успешно, в противном случае false. |
25 | public boolean setReadOnly() Помечает файл или каталог с именем этого абстрактного пути, чтобы разрешить только операции чтения. Возвращает true тогда и только тогда, когда операция выполнена успешно, в противном случае false. |
26 | public static File createTempFile(String prefix, String suffix, File directory) throws IOException Создает новый пустой файл в указанном каталоге, используя строковые prefix и suffix, чтобы сгенерировать его имя. Возвращает абстрактный путь, обозначающий вновь созданный пустой файл. |
27 | public static File createTempFile(String prefix, String suffix) throws IOException Создает пустой файл в каталоге временных файлов по умолчанию, используя данные prefix и suffix, чтобы сгенерировать его имя. Вызов этого метода эквивалентен вызову createTempFile(prefix, suffix, null). Возвращает абстрактное имя пути, обозначающее вновь созданный пустой файл. |
28 | public int compareTo(File pathname) Сравнивает лексикографически два абстрактных пути. Возвращает ноль, если аргумент равен этому абстрактному пути, значение меньше нуля, если это абстрактное имя пути лексикографически меньше аргумента или значение больше нуля, если этот абстрактный путь лексикографически больше аргумента. |
29 | public int compareTo(Object o) Сравнивает этот абстрактный путь с другим объектом. Возвращает ноль, если аргумент равен этому абстрактному пути, значение меньше нуля, если это абстрактное имя пути лексикографически меньше аргумента или значение больше нуля, если этот абстрактный путь лексикографически больше аргумента. |
30 | public boolean equals(Object obj) Проверяет этот абстрактный путь на равенство с данным объектом. Возвращает true тогда и только тогда, когда аргумент не является нулевым и представляет собой абстрактный путь, который обозначает тот же файл или каталог, что и этот абстрактный путь. |
31 | public String toString() Возвращает строковый путь этого абстрактного пути. Это просто строка, возвращаемая методом getPath(). |
Пример
Ниже приведен пример демонстрации объекта File:
Учтите, что существует исполняемый файл First.txt, а другой файл Second.txt не исполняется в текущем каталоге. Скомпилируем и запустим указанную выше программу. Это приведет к следующему результату:
package test; import java.io.File; public class Test < public static void main(String[] args) < File f = null; String[] strs = ; try < // для каждой строки в массиве строк for(String s:strs ) < // создание нового файла f = new File(s); // true, если файл является исполняемым boolean bool = f.canExecute(); // нахождение абсолютного пути String a = f.getAbsolutePath(); // вывод абсолютного пути System.out.print(a); // вывод System.out.println(" исполняется: " + bool); >> catch (Exception e) < // если любая ошибка ввода/вывода e.printStackTrace(); >> >
Получим следующий результат:
E:\Soft\NetBeans 8.2\Projects\test\test\First.txt исполняется: false E:\Soft\NetBeans 8.2\Projects\test\test\Second.txt исполняется: false
Получим следующий результат, если существует исполняемый файл First.txt:
Java file все методы
Класс File, определенный в пакете java.io, не работает напрямую с потоками. Его задачей является управление информацией о файлах и каталогах. Хотя на уровне операционной системы файлы и каталоги отличаются, но в Java они описываются одним классом File.
В зависимости от того, что должен представлять объект File — файл или каталог, мы можем использовать один из конструкторов для создания объекта:
File(String путь_к_каталогу) File(String путь_к_каталогу, String имя_файла) File(File каталог, String имя_файла)
// создаем объект File для каталога File dir1 = new File("C://SomeDir"); // создаем объекты для файлов, которые находятся в каталоге File file1 = new File("C://SomeDir", "Hello.txt"); File file2 = new File(dir1, "Hello2.txt");
Класс File имеет ряд методов, которые позволяют управлять файлами и каталогами. Рассмотрим некоторые из них:
- boolean createNewFile() : создает новый файл по пути, который передан в конструктор. В случае удачного создания возвращает true, иначе false
- boolean delete() : удаляет каталог или файл по пути, который передан в конструктор. При удачном удалении возвращает true.
- boolean exists() : проверяет, существует ли по указанному в конструкторе пути файл или каталог. И если файл или каталог существует, то возвращает true, иначе возвращает false
- String getAbsolutePath() : возвращает абсолютный путь для пути, переданного в конструктор объекта
- String getName() : возвращает краткое имя файла или каталога
- String getParent() : возвращает имя родительского каталога
- boolean isDirectory() : возвращает значение true, если по указанному пути располагается каталог
- boolean isFile() : возвращает значение true, если по указанному пути находится файл
- boolean isHidden() : возвращает значение true, если каталог или файл являются скрытыми
- long length() : возвращает размер файла в байтах
- long lastModified() : возвращает время последнего изменения файла или каталога. Значение представляет количество миллисекунд, прошедших с начала эпохи Unix
- String[] list() : возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге
- File[] listFiles() : возвращает массив файлов и подкаталогов, которые находятся в определенном каталоге
- boolean mkdir() : создает новый каталог и при удачном создании возвращает значение true
- boolean renameTo(File dest) : переименовывает файл или каталог
Работа с каталогами
Если объект File представляет каталог, то его метод isDirectory() возвращает true . И поэтому мы можем получить его содержимое — вложенные подкаталоги и файлы с помощью методов list() и listFiles() . Получим все подкаталоги и файлы в определенном каталоге:
import java.io.File; public class Program < public static void main(String[] args) < // определяем объект для каталога File dir = new File("C://SomeDir"); // если объект представляет каталог if(dir.isDirectory()) < // получаем все вложенные объекты в каталоге for(File item : dir.listFiles())< if(item.isDirectory())< System.out.println(item.getName() + " \t folder"); >else < System.out.println(item.getName() + "\t file"); >> > > >
Теперь выполним еще ряд операций с каталогами, как удаление, переименование и создание:
import java.io.File; public class Program < public static void main(String[] args) < // определяем объект для каталога File dir = new File("C://SomeDir//NewDir"); boolean created = dir.mkdir(); if(created) System.out.println("Folder has been created"); // переименуем каталог File newDir = new File("C://SomeDir//NewDirRenamed"); dir.renameTo(newDir); // удалим каталог boolean deleted = newDir.delete(); if(deleted) System.out.println("Folder has been deleted"); >>
Работа с файлами
Работа с файлами аналогична работе с каталога. Например, получим данные по одному из файлов и создадим еще один файл:
import java.io.File; import java.io.IOException; public class Program < public static void main(String[] args) < // определяем объект для каталога File myFile = new File("C://SomeDir//notes.txt"); System.out.println("File name: " + myFile.getName()); System.out.println("Parent folder: " + myFile.getParent()); if(myFile.exists()) System.out.println("File exists"); else System.out.println("File not found"); System.out.println("File size: " + myFile.length()); if(myFile.canRead()) System.out.println("File can be read"); else System.out.println("File can not be read"); if(myFile.canWrite()) System.out.println("File can be written"); else System.out.println("File can not be written"); // создадим новый файл File newFile = new File("C://SomeDir//MyFile"); try < boolean created = newFile.createNewFile(); if(created) System.out.println("File has been created"); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >
При создании нового файла метод createNewFile() в случае неудачи выбрасывает исключение IOException , поэтому нам надо его отлавливать, например, в блоке try. catch, как делается в примере выше.