Skip to content

Основы ввода-вывода в 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 использует концепцию потоков для операций ввода-вывода. Существуют два основных типа потоков:

  1. Байтовые потоки: работают с данными побайтово (например, InputStream, OutputStream)
  2. Символьные потоки: работают с символами (например, 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-приложений.