Загрузка файла как InputStream в Java — FileInputStream и getResourceAsStream

Чтобы прочитать содержимое файла побайтово, мы можем «открыть» этот файл как поток ввода с помощью класса FileInputStream. Это базовый способ работы с файлами в Java и основа для многих более высокоуровневых операций.

Чтобы понять этот пример, желательно знать:

  • Класс File

  • Класс InputStream

  • Класс FileInputStream

Пример 1: загрузка текстового файла как InputStream

import java.io.InputStream;
import java.io.FileInputStream;

public class Main {

  public static void main(String args[]) {

    try {

      // file input.txt is loaded as input stream
      // input.txt file contains:
      // This is a content of the file input.txt
      InputStream input = new FileInputStream("input.txt");

      System.out.println("Data in the file: ");

      // Reads the first byte
      int i = input.read();

      while(i != -1) {
        System.out.print((char)i);

        // Reads next byte from the file
        i = input.read();
      }
      input.close();
    }

    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

Вывод:

Data in the file:
This is a content of the file input.txt.

В примере выше у нас есть файл input.txt. Содержимое этого файла такое:

This is a content of the file input.txt.

Мы использовали класс FileInputStream, чтобы загрузить файл input.txt как поток ввода. Затем с помощью метода read() мы читаем все данные из файла по одному байту.

Пример 2: загрузка Java-файла как InputStream

Допустим, у нас есть Java-файл с именем Test.java:

class Test {
  public static void main(String[] args) {
    System.out.println("This is Java File");
  }
}

Мы можем загрузить и этот Java-файл как поток ввода:

import java.io.InputStream;
import java.io.FileInputStream;

public class Main {

  public static void main(String args[]) {

    try {

      // file Test.java is loaded as input stream
      InputStream input = new FileInputStream("Time.java");

      System.out.println("Data in the file: ");

      // Reads the first byte
      int i = input.read();

      while(i != -1) {
        System.out.print((char)i);

        // Reads next byte from the file
        i = input.read();
      }
      input.close();
    }

    catch(Exception e) {
      e.getStackTrace();
    }
  }
}

Вывод:

Data in the file:
class Test {
  public static void main(String[] args) {
    System.out.println("This is Java File");
  }
}

В этом примере мы снова использовали класс FileInputStream, чтобы загрузить Java-файл как поток ввода.

Подсказка

Для FileInputStream Java читает файл как поток байтов — неважно, что внутри: .txt, .java, .png или любой другой формат. Байты остаются байтами.

Предупреждение

Не забывайте закрывать поток вызовом input.close(), иначе файл может остаться «занятым» операционной системой. Ещё лучше — использовать конструкцию try-with-resources, которая закроет поток автоматически.