Обзор класса FileInputStream в Java

Обзор класса FileInputStream в Java

В классе FileInputStream создается объект типа InputStream, который можно использовать для чтения байтов из файла.

Ниже приведены наиболее часто употребляемые конструкторы этого класса.

FileInputStream(String __)
FileInputStream(File _)

Каждый из них может сгенерировать исключение типа FileNotFoundException. Здесь параметр путь_к_файлу обозначает полное имя пути к файлу, а параметр объект_файла - объект типа File, описывающий файл.

В следующем примере кода создаются два объекта класса FileInputStream, использующих один и тотже файл на диске и оба конструктора данного класса.

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 с ресурсами для автомати­ческого закрытия файла, когда он больше не нужен.

//    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);
        }
    }
}

Эта программа выводит следующий результат:

   : 2276
 20 ,       read()
/
/
 


















  : 2256
  20     read(b[])
 

  : 2236
 10 ,    


  : 2226

Этот несколько надуманный nример демонстрирует чтение тремя способами, пропуск вводимых байтов данных и проверку количества байтов, доступных для ввода из потока.

В приведенном выше примеру обрабатываются все исклю­чения ввода-вывода, которые могут произойти бдагодаря оператору try с ресурсами.

Интересное видео на сегодня:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *