BestProg
Работа с файлами в Java. Класс File . Основные методы работы
В данной теме расписаны базовые методы класса File , который есть частью системы ввода/вывода Java. Для рассмотренных методов приведены примеры с объяснениями.
Содержание
Поиск на других ресурсах:
1. Создание экземпляра класса File . Конструкторы класса
В классе File реализованы несколько конструкторов, каждый из которых позволяет формировать имя файла или каталога разными способами.
Наиболее распространенным есть конструктор, который получает строку типа String . В этой строке задается полное (абсолютное) или сокращенное (относительное) имя файла или каталога, который рассматривается (создается, определяется и т.п.).
Также существуют конструкторы, формирующие имя файла из нескольких частей.
Пример.
Результат выполнения программы
2. Метод getName() . Получить имя файла или каталога
Метод getName() возвращает имя файла или каталога, с которым связана файловая переменная. Если абсолютный путь к имени файла (каталога) содержит несколько уровней вложения, то возвращается непосредственно имя этого файла (каталога). Общая форма использования метода следующая
- name – переменная типа String , которая есть результатом выполнения метода;
- fileObj – файловый объект, связанный с файлом или каталогом.
Пример.
Результат выполнения программы
3. Метод getPath() . Получить имя файла
Метод getPath() возвращает имя файла (каталога), которое было задано в конструкторе при создании файлового объекта типа File . Общая форма использования метода следующая
- path – строка типа String , что есть именем файла (каталога), которое было задано при создании файловой переменной fileObj .
Пример.
4. Метод isAbsolute() . Определить, указан ли полный путь к файлу
Метод isAbsolute() позволяет определить, указан ли полный путь к файлу при создании файлового объекта в конструкторе класса File . Общая форма использования метода следующая
- res – результат, который равен true , если при создании файловой переменной fileObj был задан абсолютный путь.
Пример.
5. Метод getAbsolutePath() . Получить полный путь к файлу
Метод getAbsolutePath() возвращает полный путь к файлу. Общая форма использования метода следующая
- path – строка типа String , которая есть результатом;
- fileObj – файловый объект, который связан с файлом, для которого нужно определить абсолютный путь.
Пример.
Результат выполнения программы
6. Методы canRead() , canWrite() . Определение того, допускает ли файловый объект чтение и запись
Методы canRead() и canWrite() предназначены для определения того, допускает ли файловый объект чтение или запись. В случае положительного результата методы возвращают true .
Пример.
Результат работы программы
7. Метод exists() . Определение наличия файла (каталога)
Метод exists() предназначен для определения существования файла, ассоциированного с файловым объектом. Общая форма использования метода следующая
- res – результат работы метода. Если res = true , то заданный файл существует;
- fileObj – объект, который проверяется.
Пример.
8. Метод isDirectory() . Определить, связан ли файловый объект с директорием
Метод isDirectory() предназначен для определения того, есть ли файл директорием (папкой). Общая форма использования метода следующая
- res – значение типа bool . Если res=true , то файл есть директорием;
- fileObj – файловый объект, который проверяется.
Пример.
9. Метод isFile() . Определить, связан ли файловый объект с файлом
Метод isFile() возвращает true , если файловый объект связан с файлом. Общая форма использования метода следующая
- res – результат вычисления. Если файловый объект есть файлом, то res = true ;
- fileObj – файловый объект.
Пример.
10. Метод isHidden() . Определить, есть ли файловый объект скрытым
Метод isHidden() возвращает true , если файловый объект связан с файлом у которого установлен атрибут «скрытый» (hidden). Общая форма использования метода
- fileObj – файловый объект;
- res – результат работы метода. Если res = true , то файловый объект связан со скрытым файлом.
Пример.
11. Метод length() . Определить размер в байтах файла, который связан с файловым объектом
Метод length() предназначен для определения размера файла и имеет следующую общую форму
Пример.
Результат работы программы
12. Метод delete() . Удаление файла
Метод delete() используется для удаления файла. Общая форма использования метода
- fileObj – файловый объект, который связан с файлом, который нужно удалить;
- res – результат выполнения метода. Если res = true , то удаление файла состоялось успешно.
Пример.
13. Метод mkdir() . Создание папки или каталога
Метод mkdir() используется для создания папки (каталога). Общая форма использования метода следующая
- res – результат типа bool . Если каталог создан успешно, то res = true , в противном случае res = false ;
- fileObj – объект типа File , который связан с именем создаваемого каталога.
Пример. Создается каталог с именем 123 в текущем каталоге.
Результат работы программы
14. Метод mkdirs() . Создание нескольких вложенных папок
Метод mkdirs() позволяет создать несколько уровней вложений папок за один раз. В отличие от метода mkdir() , этот метод создает уровни вложения папок, которые не существуют. В методе mkdir() чтобы создать подпапку нужно, чтобы предварительно обязательно была созданная папка верхнего уровня.
Общая форма использования метода следующая:
- fileObj – файловый объект, который содержит строку с именем или именами папок, которые нужно создать;
- res – результат выполнения метода. Если последовательность папок создана успешно, то res = true .
Пример.
15. Метод renameTo(File). Переименование файла
Метод renameTo() предназначен для переименования файла. Общая форма использования метода следующая
- res – результат выполнения метода. Если файл переименован успешно, то res = true , иначе res = false ;
- f1 – файловая переменная, соответствующая файлу-источнику, который нужно переименовать;
- f2 – файловая переменная, соответствующая новому имени файла-источника f1 после его переименования.
Пример.
16. Метод getTotalSpace() . Определение объема диска
С помощью метода getTotalSpace() можно определить общий размер носителя (диска) в байтах. Метод возвращает результат типа long . Общая форма использования метода следующая
- fileObj – файловый объект, в котором определено имя диска для которого определяется размер;
- totalSpace – переменная типа long , которая есть результатом выполнения метода.
Пример.
Результат выполнения программы
17. Метод getFreeSpace() . Определить свободное место на диске
С помощью метода getFreeSpace() можно определить объем в байтах свободного места на носителе. Общая форма использования метода следующая
- fileObj – файловый объект, который содержит имя носителя, имя файла или имя папки. Если задается имя файла или папки, то определяется объем свободного места для носителя, на котором этот диск и файл размещены;
- space – переменная типа long , которая есть результатом работы метода.
Пример.
Результат выполнения программы
18. Метод getUsableSpace() . Определение полезного места на диске
С помощью метода getUsableSpace() можно определить полезный размер места на носителе (диске). Во многих случаях значение, которое возвращает данный метод равно значению, которое возвращает метод getFreeSpace() . Общая форма использования метода следующая:
- fileObj – файловый объект, который содержит имя диска или имя файла. Если для fileObj определено имя файла, то определяется объем носителя, на котором этот файл сохраняется;
- space – переменная типа long , которая есть размером полезного места на диске.
Источник
Руководство по Java Core. Файлы и работа с ними.
При разработке программного обеспечения мы сталкиваемся с приложениями, в которых необходимо передавать или принимать файлы. Практически все классы, необходимые для этой задачи находтся в паке java.io. В работе с файлами испольщуется такое понятие, как поток (stream), который принимает входной файл и перемещает его в место назначения.
В языке программирования Java поддерживаются потоки для различных типов данных. Давайте рассмотрим их.
Потоки (Streams)
Мы можем сказать ,что поток – это последовательность данных. Существует два вида потоков:
- Входящий поток
В Java для чтения файлов используется InputStream . - Исходящий поток
В Java используется OutputStream для записи данных в файл.
Схематично это можно изобразить так:
В Java крайне хорошо поддерживается работа с файлами. Рассмотрим различные примеры работы с файлами.
Байты
Чаще всего, для работы с байтами используются FileInputStream и FileOutputStream. Давайте рассмотрим как это работает на примере простого приложения.
Создайте в корневой папке проекта папку resources. В это йпапке создайте два файла: inputFile.txt и outputFile.txt.
Файл inputFile.txt:
Оставьте файл outputFile.txt пустым.
В результате работы программы мы получим следуюющий результат:
После запуска приложения смотрим файл outputFile.txt
Копирование успешно выполнено.
Символы
Байтовые потоки в Java используются для ввода и вывода 8-битных элементов. Символьные потоки используюстся для работы с 16-битной кодировкой Unicode.
Для работы с символами, чаще всего используют FileReader и FileWriter. FileReader читает одновременно по 2 байта, а FileWriter, в своб очередь, записывает по 2 байта за раз.
Для понимания того, как жто работает на практике рассмотирм пример простого приложения.
Создайте в корневой папке проекта папку resources. В это йпапке создайте два файла: inputFile.txt и outputFile.txt.
Файл inputFile.txt:
Оставьте файл outputFile.txt пустым.
В результате работы программы мы получим следуюющий результат:
После запуска приложения смотрим файл outputFile.txt
Копирование успешно выполнено.
Стандартные потоки
Как и во многих других языках программирования, в Java обеспечивается ввод информации в программу во время её выполнения. Для этих целей в Java существует три стандартных потока:
- Стандратный ввод
Используется для ввода пользователем информаци (обычно – клавиатура) и представлен элементом System.in. - Стандартный вывод
Используется для вывода данных пользователю (обычно – экран монитора) и представлен элементом System.out. - Стандартная ошибка
Используется для вывода ошибок произошедших при работе программы (обычно – на экран монитора) и представлен элементом System.err.
Для понимания того, как это работает на практике, рассмотрим пример простого приложения.
Запускаем программу и начинаем вводить символы. Если нам необходимо выйти – вводим символ ‘Q’.
В результате работы рпограммы мы получим, примерно, следующий результат:
Чтение и запись файлов
Теперь рассмотрим чтение и запись файлов более подробно.
Рассмотренные ранее InputStream и OutputSream используются для чтения и записи данных из файлов записи их в файлы.
Давайте посмотрим а иерархию этих двух классов:
Далее мы рассмотрим FileInputStream и FileOutputStream.
FileInputStream
Этот элемент используется для чтения данных из файлов.
FileInputStream имеет следующие методы:
- public void close() throws IOException
Этот метод закрывает поток и освобождает любый ресурсы системы, которые связаны с этим файлом. В случае ошибки “бросает” IOException. - public void finalize() throws IOException
Этот метод “чистит” соединение с файлом. И проверяет, что метод close() был вызван. В случае ошибки “бросает” IOException. - public int read(int r) throws IOException
Этот метод читает определённые байты данных из входящего файла .Возвращает int. Если весь файл прочитан – будет возвращено занчение -1. В случае ошибки “бросает” IOException. - public int read(byte[] r) throws IOException
Этот метод читает количество байтов, равное длине массива (r.length). Если весь файл прочитан – будет возвращено занчение -1. В случае ошибки “бросает” IOException. - public int available() throws IOException
Этот метода возвращает количество байтов, которое может быть прочитано из заданного входного файла. Возвращаетint.
Рассмотрим два ключевых входных потока:
FileOutputStream
Этот поток используется для создания файлов и записи в них данных. Если файл, в который мы хотим записать данные ещё не существует, то FileOutputStream создаст его автоматически.
Исходящий поток имеет следующие методы:
- public void close() throws IOException
Этот метод закрывает исходящий поток и освобождает все ресурсы системы, который связаны с ним. В случае ошибки “бросает” IOException. - protected void finalize() throws IOException
Этот метод “чистит” соединение с файлом. Проверяет был ли вызван метод close(). В случае ошибки “бросает” IOException. - public void write(int w) throws IOException
Этот метод записывает опредлённые байты в указанный файл. В случае ошибки “бросает” IOException. - public void write(byte[] w) throws IOException
Этот метод записывает количество байтов, равное длине заданного массива (w.length) в указанный файл. В случае ошибки “бросает” IOException.
Рассмотрим два ключевых исходящих потока:
Для понимания того, как это работает на практике, рассмотрим пример простого приложения.
В результате работы программы мы получим, следующий результат:
Навигация файлов и I/O
Рассмотрим другие ключевые классы, которые мы модем использовать при работе с файлами и I/O:
Директории в Java
Директория (грубо говоря – папка) – это экземпляр класса File, который содержит список других файлов.
Для создания директорий существует два метода, которые мы можем использовать:
- mkdir()
Этот метод создаёт директорию и возвращает логическое значение true, если создание прошло успешно, и false – если нет. Ошибка может быть вызвана либо тем, что данная директория уже существует, либо тем, что вводнй путь директории ещё не создан. - mkdirs()
Этот метод метод создаёт и саму директорию и путь (родительские папки) к этой директории.
Для понимания того, как это работает на практике, рассмотрим пример простого приложения.
В результате работы программы будет создана директория (папка) с названием testDir по указанному пути. Вы олжны вставить свой желаемый путь создаваемой директории.
Кроме того, мы также можем получить список файлов и директорий, которые находятся в интересующей нас папке с помощью метода list().
Рассмотрим пример простого приложения, в которм мы попробуем получить список всех файлов и директорий в корневой папке проекта.
В результате работы программы мы получим, примерно, следующий результат:
В этом уроке мы изучили основы работы с файлами в языке программирования Java. Мы рассмотрели ключевые классы и ознакомились с примерами простых приложений, которые демонстрируют их работу.
В следующем уроке мы изучим такую важную составляющую языка программирования Java, как исключения (Exceptions).
Источник