В классе FileInputStream создается объект типа InputStream, который можно использовать для чтения байтов из файла.
Ниже приведены наиболее часто употребляемые конструкторы этого класса.
1 2 |
FileInputStream(String путь_к_файлу) FileInputStream(File объект_файла) |
Каждый из них может сгенерировать исключение типа FileNotFoundException. Здесь параметр путь_к_файлу обозначает полное имя пути к файлу, а параметр объект_файла — объект типа File, описывающий файл.
В следующем примере кода создаются два объекта класса FileInputStream, использующих один и тотже файл на диске и оба конструктора данного класса.
1 2 3 |
FileInputStream f1 = new FileInputStream("/home/linuxuser/scriptstep.sh"); File f2 = new File("/home/linuxuser/scriptstep.sh"); FileInputStream f3 = new FileInputStream(f2); |
Хотя первый конструктор, вероятно, используется чаще, второй конструктор позволяет подробно исследовать файл с помощью методов из класса File, прежде чем присоединять его к потоку ввода.
Когда создается объект типа FileInputStream, определяемый им поток ввода открывается для чтения. В классе FileInputStream переопределяются шесть методов из абстрактного класса InputStream.
В то же время методы mark() и reset() не переопределяются, и поэтому все попытки использовать метод reset() вместе с объектом типа FileInputStream приводят к генерированию исключения типа IOException.
В приведенном ниже примере программы показано, как прочесть один байт, массив байтов и часть массива байтов, а также демонстрируется применение метода available() для определения оставшегося количества байтов и метода skip() для пропуска нежелательных байтов.
Данная программа читает свой исходный файл, который должен присуrствовать в текущем каталоге. Обратите вниманиена то, что в данном примере используется оператор try с ресурсами для автоматического закрытия файла, когда он больше не нужен.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
// Продемонстрировать применение класса FileInputStream. // В этой программе используется оператор try с ресурсами. // Требуется установка комплекта JDK, начиная с версии 7 import java.io.*; class FileInputStreamExample { public static void main(String args[]) { int size; // Для автоматического закрытия потока ввода // используется оператор try с ресурсами try(FileInputStream f = new FileInputStream("fileinput.java")) { System.out.println("Общее количество доступных байтов: " + (size = f.available())); int n = size / 110; System.out.println("Первые " + n + " байтов, " + "прочитанных из файла по очереди методом read()"); for(int i = 0; i < n; i++) { System.out.println((char) f.read()); } System.out.println("\nВсе еще доступно: " + f.available()); System.out.println("Чтение следующих " + n + " байтов по очереди методом read(b[])"); byte b[] = new byte[n]; if(f.read(b) != n) { System.err.println("Нельзя прочитать " + n + " байтов."); } System.out.println(new String(b, 0, n)); System.out.println("\nВсе еще доступно: " + (size = f.available())); System.out.println("Чтение " + n/2 + " байтов, размещаемых в конце массива"); if(f.read(b, n/2, n/2) != n/2) { System.err.println("Нельзя прочитать " + n/2 + " байтов."); } System.out.println(new String(b, 0, b.length)); System.out.println("\nВсе еще доступно: " + f.available()); } catch (IOException e) { System.out.println("Ошибка ввода-вывода: " + e); } } } |
Эта программа выводит следующий результат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Общее количество доступных байтов: 2276 Первые 20 байтов, прочитанных из файла по очереди методом read() / / Ð Ñ Ð ¾ Ð ´ Ð µ Ð ¼ Ð ¾ Ð ½ Ñ Все еще доступно: 2256 Чтение следующих 20 байтов по очереди методом read(b[]) �трировать Все еще доступно: 2236 Чтение 10 байтов, размещаемых в конце массива �трир�приме Все еще доступно: 2226 |
Этот несколько надуманный nример демонстрирует чтение тремя способами, пропуск вводимых байтов данных и проверку количества байтов, доступных для ввода из потока.
В приведенном выше примеру обрабатываются все исключения ввода-вывода, которые могут произойти бдагодаря оператору try с ресурсами.