Основы ввода-вывода в Java
Введение
Ввод-вывод (I/O - Input/Output) - это фундаментальная часть любого языка программирования, и Java не исключение. Эта лекция познакомит вас с базовыми концепциями и методами ввода-вывода в Java, которые позволяют программам взаимодействовать с пользователем и файловой системой.
Стандартный ввод-вывод
Java предоставляет несколько встроенных классов для работы со стандартным вводом-выводом.
Вывод данных
1. System.out.println()
Это наиболее часто используемый метод для вывода данных в консоль.
System.out.println("Привет, мир!");
2. System.out.print()
Выводит данные без перехода на новую строку.
System.out.print("Привет, ");
System.out.print("мир!");
// Выведет: Привет, мир!
3. System.out.printf()
Позволяет форматировать вывод.
String name = "Алиса";
int age = 25;
System.out.printf("Меня зовут %s и мне %d лет.%n", name, age);
Ввод данных
Для ввода данных чаще всего используется класс Scanner
.
import java.util.Scanner;
public class InputExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите ваше имя: ");
String name = scanner.nextLine();
System.out.print("Введите ваш возраст: ");
int age = scanner.nextInt();
System.out.println("Привет, " + name + "! Тебе " + age + " лет.");
scanner.close(); // Важно закрывать Scanner после использования
}
}
Методы класса Scanner
nextLine()
- считывает строкуnextInt()
- считывает целое числоnextDouble()
- считывает число с плавающей точкойnext()
- считывает следующее слово (до пробела)nextBoolean()
- считывает булево значение
Работа с файлами
Java предоставляет различные классы для работы с файлами. Рассмотрим основные из них.
Чтение из файла
Для чтения из файла можно использовать FileReader
в сочетании с BufferedReader
:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("Ошибка при чтении файла: " + e.getMessage());
}
}
}
Запись в файл
Для записи в файл можно использовать FileWriter
:
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteExample {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("Это пример записи в файл.\n");
writer.write("Здесь может быть ваш текст.");
} catch (IOException e) {
System.out.println("Ошибка при записи в файл: " + e.getMessage());
}
}
}
Обработка исключений при вводе-выводе
При работе с вводом-выводом важно обрабатывать возможные исключения. Наиболее распространенное исключение - IOException
.
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ExceptionHandlingExample {
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("nonexistent.txt"));
String line = reader.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("Произошла ошибка при чтении файла: " + e.getMessage());
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
System.out.println("Ошибка при закрытии файла: " + e.getMessage());
}
}
}
}
Потоки ввода-вывода
Java использует концепцию потоков для операций ввода-вывода. Существуют два основных типа потоков:
- Байтовые потоки: работают с данными побайтово (например,
InputStream
,OutputStream
) - Символьные потоки: работают с символами (например,
Reader
,Writer
)
Выбор типа потока зависит от типа данных, с которыми вы работаете.
Практическое задание
Напишите программу, которая: 1. Запрашивает у пользователя имя и возраст. 2. Записывает эту информацию в файл "user_info.txt". 3. Затем считывает информацию из файла и выводит ее на экран.
import java.io.*;
import java.util.Scanner;
public class UserInfoIO {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ввод данных
System.out.print("Введите ваше имя: ");
String name = scanner.nextLine();
System.out.print("Введите ваш возраст: ");
int age = scanner.nextInt();
// Запись в файл
try (FileWriter writer = new FileWriter("user_info.txt")) {
writer.write(name + "\n" + age);
} catch (IOException e) {
System.out.println("Ошибка при записи в файл: " + e.getMessage());
}
// Чтение из файла
try (BufferedReader reader = new BufferedReader(new FileReader("user_info.txt"))) {
String nameFromFile = reader.readLine();
String ageFromFile = reader.readLine();
System.out.println("Прочитано из файла:");
System.out.println("Имя: " + nameFromFile);
System.out.println("Возраст: " + ageFromFile);
} catch (IOException e) {
System.out.println("Ошибка при чтении файла: " + e.getMessage());
}
scanner.close();
}
}
Заключение
Ввод-вывод - это ключевой аспект программирования на Java. Он позволяет программам взаимодействовать с пользователем и внешними ресурсами, такими как файлы. В этой лекции мы рассмотрели основы работы со стандартным вводом-выводом, файлами и обработкой исключений. Понимание этих концепций является фундаментальным для разработки практически любых Java-приложений.