Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Ввод-вывод в Java: файлы, потоки и основы I/O

Пакет java.io содержит практически все классы для выполнения ввода-вывода (I/O) в Java. Все потоки представляют источник ввода и назначение вывода. Потоки поддерживают примитивы, объекты, локализованные символы и др.

Потоки (Streams)

Поток — последовательность данных. Два основных вида:

Байтовые потоки (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();
        }
    }
}

Стандартные потоки

Пример: чтение с консоли до '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

Чтение данных из файла. Конструкторы:

Основные методы:

МетодОписание
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.

Создание директорий

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

  1. Ввод-вывод в C: scanf() и printf() — подробное руководство
  2. Работа с файлами в Python: открытие, чтение, запись и управление
  3. Переменные и литералы в Java: подробное руководство
  4. Ввод и вывод в Java: печать, чтение и форматирование данных
  5. Классы и объекты в Java: практическое руководство
  6. Абстрактные классы и методы в Java: полное руководство
  7. Вложенные и внутренние классы в Java: типы, примеры и лучшие практики
  8. Java throw vs throws: мастерство обработки исключений с практическими примерами
  9. Освоение Java Scanner: подробное руководство с практическими примерами
  10. Освоение Java Autoboxing и Unboxing: практические примеры и лучшие практики