FileInputStream предназначен для чтения потоков байтов, таких, например, как данные изображения. Он является наследником класса InputStream и поэтому реализует все его методы.
Для создания объекта FileInputStream можно использовать ряд конструкторов. Наиболее используемая версия конструктора в качестве параметра принимает путь к считываемому файлу:
FileInputStream(String fileName) throws
FileNotFoundException
Если файл не может быть открыт, например, по указанному пути такого файла не существует, то генерируется исключение FileNotFoundException.
Пример.
Результат работы программы:
В данном случае в программе считывается каждый отдельный байт в переменную i с помощью инструкции:
while((i = fin.read())!=-1){
Когда в потоке больше нет данных для чтения, метод read()
возвращает число -1.
Затем каждый считанный байт конвертируется в объект типа char и выводится на консоль. Если явное преобразование типов не выполнять, используя код цикла в виде:
while((i = fin.read()) != -1) {
System.out.print(i + " ");
},
то на экране отобразятся коды символов:
Можно также считать данные в массив байтов и затем производить с ним манипуляции:
byte[] buffer = new byte[fin.available()];
// считаем файл в буфер fin.read(buffer, 0, fin.available());
System.out.println("Содержимое файла:"); for(int i = 0; i < buffer.length; i++){
System.out.print((char) buffer[i]);
}
Объединим оба примера и выполним чтение из одного (notes.txt) и запись в другой (notes_new.txt) файл.
Пример.
Замечание.
При выполнении программы в среде OnlineGDB даже если разработчик не создал предварительно файл notes_new.txt самостоятельно, то он будет создан автоматически в новой закладке (содержимое файла можно просмотреть):
Классы FileInputStream и FileOutputStream предназначены прежде всего для записи двоичных файлов, то есть для записи и чтения байтов. И хотя (как показывают примеры) они также могут использоваться для работы с текстовыми файлами, но все же для этой задачи больше подходят другие классы.
Достарыңызбен бөлісу: |