Класс 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, как делается в примере выше.