В Java с помощью класса File можно работать с файлами. Этот класс находится в пакете java.io. Для работы с файлом создаётся объект класса File, при этом указывается имя файла.
Зачем нужно работать с файлами?
- Работа с файлами — неотъемлемая часть любого языка программирования, так как она позволяет сохранять результат выполнения программы в файл и выполнять над ним различные операции.
- Проще говоря, работа с файлами — это чтение и запись данных в файл.
Пример:
// Импорт класса File
import java.io.File;
class Geeks
{
public static void main(String[] args)
{
// Указание имени файла
File obj = new File("myfile.txt");
System.out.println("File Created!");
}
}
Вывод:
File Created!
В Java для выполнения операций ввода-вывода с файлами используется концепция потока (Stream). Сначала познакомимся с понятием Stream в Java.
Потоки (Streams) в Java
В Java поток — это последовательность данных. Этот концепт применяется для операций ввода-вывода с файлом. Существуют следующие типы потоков:
1. Входящий поток (Input Stream)
Класс InputStream является суперклассом для всех входящих потоков. Входящий поток используется для чтения данных с различных устройств ввода, таких как клавиатура, сеть и т.д. InputStream — абстрактный класс и сам по себе не используется напрямую. Для чтения данных применяются его подклассы.
Подклассы InputStream включают:
- AudioInputStream
- ByteArrayInputStream
- FileInputStream
- FilterInputStream
- StringBufferInputStream
- ObjectInputStream
Создание InputStream:
// Создание объекта входящего потока
InputStream obj = new FileInputStream();
Здесь поток создается с помощью FileInputStream.
Обратите внимание: входящий поток можно создавать и с помощью других подклассов InputStream.
Основные методы InputStream:
Метод | Описание |
---|---|
read() | Читает один байт из входящего потока. |
read(byte[] array) | Читает байты из потока и сохраняет их в указанный массив. |
mark() | Помечает позицию в потоке, до которой можно будет прочитать данные. |
available() | Возвращает количество доступных для чтения байтов в потоке. |
markSupported() | Проверяет, поддерживаются ли методы mark() и reset() в потоке. |
reset() | Возвращает управление к позиции, на которой был установлен маркер. |
skip() | Пропускает указанное число байтов во входящем потоке. |
close() | Закрывает входящий поток. |
2. Исходящий поток (Output Stream)
Исходящий поток используется для записи данных на различные устройства вывода, например, монитор, файл и т.д. OutputStream — абстрактный суперкласс для всех исходящих потоков. Из-за абстрактности он не используется напрямую, но его подклассы применяются для записи данных.
Подклассы OutputStream следующие:
- ByteArrayOutputStream
- FileOutputStream
- StringBufferOutputStream
- ObjectOutputStream
- DataOutputStream
- PrintStream
Создание OutputStream:
// Создание объекта исходящего потока
OutputStream obj = new FileOutputStream();
Здесь поток создается с помощью FileOutputStream.
Обратите внимание: исходящий поток можно создавать и с помощью других подклассов OutputStream.
Основные методы OutputStream:
Метод | Описание |
---|---|
write() | Записывает указанный байт в исходящий поток. |
write(byte[] array) | Записывает байты из заданного массива в исходящий поток. |
close() | Закрывает исходящий поток. |
flush() | Принуждает запись всех данных, находящихся в потоке, в конечное место назначения. |
По типу данных потоки делятся на:
1. Потоки байтов (Byte Stream)
Используются для чтения и записи данных в байтовом формате и подразделяются на:
- Byte Input Stream — для чтения байтовых данных с разных устройств
- Byte Output Stream — для записи байтовых данных на разные устройства
2. Потоки символов (Character Stream)
Используются для чтения и записи символьных данных, делятся на:
- Character Input Stream — для чтения символов с устройств
- Character Output Stream — для записи символов на устройства
Понимая, что такое поток, продолжим изучать работу с файлами в Java, подробно рассмотрев методы класса File для создания, чтения и записи файлов.
Методы класса File в Java
Ниже приведена таблица основных методов класса File:
Метод | Описание | Возвращаемый тип |
---|---|---|
canRead() | Проверяет, доступен ли файл для чтения | Boolean |
canWrite() | Проверяет, доступен ли файл для записи | Boolean |
createNewFile() | Создаёт пустой файл | Boolean |
delete() | Удаляет файл | Boolean |
exists() | Проверяет, существует ли файл | Boolean |
length() | Возвращает размер файла в байтах | Long |
getName() | Возвращает имя файла | String |
list() | Возвращает массив имён файлов в директории | String[] |
mkdir() | Создаёт новую директорию | Boolean |
getAbsolutePath() | Возвращает абсолютный путь к файлу | String |
Теперь перейдем к основным операциям с файлами в Java.
Операции с файлами
Основные операции, которые можно выполнить с файлами в Java:
- Создание файла
- Чтение из файла
- Запись в файл
- Удаление файла
1. Создание файла
- Для создания файла используется метод
createNewFile()
. - Если файл успешно создан, метод возвращает true, если файл уже существует — false.
Пример:
// Создание файла на Java
// Импорт класса File и IOException
import java.io.File;
import java.io.IOException;
public class CreateFile
{
public static void main(String[] args)
{
// Создание файла и обработка исключения
try {
File Obj = new File("myfile.txt");
// Создание файла
if (Obj.createNewFile()) {
System.out.println("File created: " + Obj.getName());
}
else {
System.out.println("File already exists.");
}
}
// Обработка исключения
catch (IOException e) {
System.out.println("An error has occurred.");
e.printStackTrace();
}
}
}
Вывод:
File created: myfile.txt — если файл создан
File already exists. — если файл уже существует
2. Запись в файл
Для записи текста в файл используется класс FileWriter и его метод write()
.
Пример:
// Запись в файл на Java
// Импорт классов FileWriter и IOException
import java.io.FileWriter;
import java.io.IOException;
public class WriteFile
{
public static void main(String[] args)
{
// Запись в текстовый файл и обработка исключений
try {
FileWriter Writer = new FileWriter("myfile.txt");
// Запись текста в файл
Writer.write("Files in Java are seriously good!!");
Writer.close();
System.out.println("Successfully written.");
}
// Обработка исключения
catch (IOException e) {
System.out.println("An error has occurred.");
e.printStackTrace();
}
}
}
Вывод:
Successfully written.
3. Чтение из файла
Для чтения содержимого файла удобно использовать класс Scanner.
Пример:
// Чтение файла на Java
// Импорт классов File, FileNotFoundException и Scanner
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class ReadFile
{
public static void main(String[] args)
{
// Чтение файла и обработка исключений
try {
File Obj = new File("myfile.txt");
Scanner Reader = new Scanner(Obj);
// Чтение файла построчно
while (Reader.hasNextLine()) {
String data = Reader.nextLine();
System.out.println(data);
}
Reader.close();
}
// Обработка исключения
catch (FileNotFoundException e) {
System.out.println("An error has occurred.");
e.printStackTrace();
}
}
}
Вывод:
Содержимое файла (например, Files in Java are seriously good!!).
4. Удаление файла
Для удаления файла используется метод delete()
.
Пример:
// Удаление файла на Java
import java.io.File;
public class DeleteFile {
public static void main(String[] args) {
File Obj = new File("myfile.txt");
// Удаление файла
if (Obj.delete()) {
System.out.println("The deleted file is : " + Obj.getName());
}
else {
System.out.println("Failed in deleting the file.");
}
}
}
Вывод:
The deleted file is : myfile.txt — если файл удалён
Failed in deleting the file. — если удаление не удалось
🔑 Ключевые моменты:
- Класс File из пакета java.io позволяет создавать объекты-файлы для последующей работы с файлами.
- Потоки (Streams) в Java используются для чтения (InputStream) и записи (OutputStream) данных в файлы и с других устройств.
- Метод
createNewFile()
создаёт файл и возвращает true, если файл был создан успешно, или false, если файл уже существует. - Класс FileWriter и его метод
write()
применяются для записи данных в файл. - Для чтения содержимого файла можно использовать класс Scanner.
- Метод
delete()
удаляет файл и возвращает true при успешном удалении.