GrabDuck

Класс File. Работа с файлами и каталогами | Java

:

Последнее обновление: 30.10.2015

Класс 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 FilesApp {

    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каталог");
                 }
                 else{
                     
                     System.out.println(item.getName() + "\tфайл");
                 }
             }
        }
    }
}

Теперь выполним еще ряд операций с каталогами, как удаление, переименование и создание:

import java.io.File;

public class FilesApp {

    public static void main(String[] args) {
        
        // определяем объект для каталога
        File dir = new File("C://SomeDir//NewDir");
        boolean created = dir.mkdir();
        if(created)
            System.out.println("Каталог успешно создан");
        // переименуем каталог
        File newDir = new File("C://SomeDir//NewDirRenamed");
        dir.renameTo(newDir);
        // удалим каталог
        boolean deleted = newDir.delete();
        if(deleted)
            System.out.println("Каталог удален");
    } 
}

Работа с файлами

Работа с файлами аналогична работе с каталога. Например, получим данные по одному из файлов и создадим еще один файл:

import java.io.File;
import java.io.IOException;

public class FilesApp {

    public static void main(String[] args) {
        
        // определяем объект для каталога
        File myFile = new File("C://SomeDir//somepicture.png");
        System.out.println("Имя файла: " + myFile.getName());
        System.out.println("Родительский каталог: " + myFile.getParent());
        if(myFile.exists())
            System.out.println("Файл существует");
        else
            System.out.println("Файл еще не создан");
        
        System.out.println("Размер файла: " + myFile.length());
        if(myFile.canRead())
            System.out.println("Файл доступен для чтения");
        else
            System.out.println("Файл не доступен для чтения");
        
        if(myFile.canWrite())
            System.out.println("Файл доступен для записи");
        else
            System.out.println("Файл не доступен для записи");
        
        // создадим новый файл
        File newFile = new File("C://SomeDir//MyFile");
        try
        {
            boolean created = newFile.createNewFile();
            if(created)
                System.out.println("Файл создан");
        }
        catch(IOException ex){
            
            System.out.println(ex.getMessage());
        }  
    } 
}

При создании нового файла метод createNewFile() в случае неудачи выбрасывает исключение IOException, поэтому нам надо его отлавливать, например, в блоке try...catch, как делается в примере выше.