Ввод-вывод в Java: файлы, потоки и основы I/O
Пакет java.io содержит практически все классы для выполнения ввода-вывода (I/O) в Java. Все потоки представляют источник ввода и назначение вывода. Потоки поддерживают примитивы, объекты, локализованные символы и др.
Потоки (Streams)
Поток — последовательность данных. Два основных вида:
- InputStream — чтение данных из источника.
- OutputStream — запись данных в назначение.
Байтовые потоки (Byte Streams)
Работают с 8-битными байтами. Основные классы: FileInputStream, FileOutputStream.
Пример: копирование файла
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("input.txt");
out = new FileOutputStream("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
}
Символьные потоки (Character Streams)
Работают с 16-битными Unicode-символами. Основные классы: FileReader, FileWriter. Внутренне используют байтовые потоки, но читают/пишут по два байта (один char).
import java.io.*;
public class CopyFile {
public static void main(String args[]) throws IOException {
FileReader in = null;
FileWriter out = null;
try {
in = new FileReader("input.txt");
out = new FileWriter("output.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
}
Стандартные потоки
- System.in — стандартный ввод (клавиатура).
- System.out — стандартный вывод (экран).
- System.err — стандартный вывод ошибок (экран).
Пример: чтение с консоли до 'q'
import java.io.*;
public class ReadConsole {
public static void main(String args[]) throws IOException {
InputStreamReader cin = null;
try {
cin = new InputStreamReader(System.in);
System.out.println("Enter characters, 'q' to quit.");
char c;
do {
c = (char) cin.read();
System.out.print(c);
} while (c != 'q');
} finally {
if (cin != null) cin.close();
}
}
}
Файловые потоки: FileInputStream и FileOutputStream
FileInputStream
Чтение данных из файла. Конструкторы:
new FileInputStream(String name)new FileInputStream(File file)
Основные методы:
| Метод | Описание |
|---|---|
read() | Читает один байт, возвращает int (-1 при конце файла) |
read(byte[] b) | Читает байты в массив, возвращает количество прочитанных |
available() | Количество байт, доступных для чтения |
close() | Закрывает поток, освобождает ресурсы |
FileOutputStream
Создаёт файл и записывает данные. Конструкторы аналогичны.
Основные методы:
| Метод | Описание |
|---|---|
write(int b) | Записывает один байт |
write(byte[] b) | Записывает массив байтов |
close() | Закрывает поток |
Пример: запись и чтение байтов
import java.io.*;
public class FileStreamTest {
public static void main(String args[]) {
try {
byte bWrite[] = {11, 21, 3, 40, 5};
OutputStream os = new FileOutputStream("test.txt");
for (int x = 0; x < bWrite.length; x++) {
os.write(bWrite[x]);
}
os.close();
InputStream is = new FileInputStream("test.txt");
int size = is.available();
for (int i = 0; i < size; i++) {
System.out.print((char) is.read() + " ");
}
is.close();
} catch (IOException e) {
System.out.print("Exception");
}
}
}
Навигация по файловой системе
Классы: File, FileReader, FileWriter.
Создание директорий
mkdir()— создаёт одну директорию (возвращает boolean).mkdirs()— создаёт директорию и все родительские.
import java.io.File;
public class CreateDir {
public static void main(String args[]) {
String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs();
}
}
Примечание: Java автоматически обрабатывает разделители путей (/ на Windows тоже работает).
Список содержимого директории
import java.io.File;
public class ReadDir {
public static void main(String[] args) {
try {
File file = new File("/tmp");
String[] paths = file.list();
for (String path : paths) {
System.out.println(path);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
java
- Ввод-вывод в C: scanf() и printf() — подробное руководство
- Работа с файлами в Python: открытие, чтение, запись и управление
- Переменные и литералы в Java: подробное руководство
- Ввод и вывод в Java: печать, чтение и форматирование данных
- Классы и объекты в Java: практическое руководство
- Абстрактные классы и методы в Java: полное руководство
- Вложенные и внутренние классы в Java: типы, примеры и лучшие практики
- Java throw vs throws: мастерство обработки исключений с практическими примерами
- Освоение Java Scanner: подробное руководство с практическими примерами
- Освоение Java Autoboxing и Unboxing: практические примеры и лучшие практики