Рубрики
Без рубрики

Поток ввода файлов Java

Поток ввода файла Java, поток ввода файла в Java, файл изображения чтения java, пример файла чтения java, поток ввода файла java, строка чтения потока ввода файла Java, пример потока ввода файла java, байты пропуска потока ввода файла Java, методы finalize(), getFD (), конструкторы потока ввода файла.

Автор оригинала: Pankaj Kumar.

1. Класс Java FileInputStream

  • Класс Java FileInputStream является частью java.io посылка.
  • FileInputStream получает входные байты из файла в файловой системе.
  • FileInputStream используется для чтения потоков необработанных байтов, таких как данные изображения.
  • FileInputStream-это подкласс класса InputStream.

2. Иерархия классов FileInputStream

3. Конструкторы FileInputStream

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

  1. FileInputStream(файловый файл) : Создает объект FileInputStream, открывая соединение с фактическим файлом с помощью указанного объекта file.
  2. FileInputStream(FileDescriptor fdObj) : Создает объект FileInputStream с помощью указанного файлового дескриптора fdObj, который представляет существующее соединение с фактическим файлом в файловой системе.
  3. FileInputStream(строковое имя) : Создает объект FileInputStream, открывая соединение с фактическим файлом, названным указанным именем, которое представляет путь к файлу.

4. Методы потока ввода файлов

Давайте взглянем на приведенные ниже методы класса FileInputStream.

  1. доступный() : Этот метод возвращает оценку количества оставшихся байтов, которые могут быть считаны из входного потока без блокировки при следующем вызове метода для этого входного потока.
  2. close() : Этот метод закрывает входной поток файла и освобождает все системные ресурсы, связанные с потоком. Если этот поток имеет связанный канал, то канал также закрывается.
  3. finalize() : Этот метод гарантирует, что метод close() этого входного потока файла вызывается, когда на него больше нет ссылок.
  4. getChannel() : Этот метод возвращает уникальный объект FileChannel, связанный с этим входным потоком файла. Начальная позиция возвращаемого канала будет равна количеству байтов, считанных из файла, а чтение байтов из этого потока приведет к увеличению позиции канала.
  5. getFD() : Этот метод возвращает объект FileDescriptor, представляющий соединение с фактическим файлом в файловой системе, используемой этим потоком ввода файлов.
  6. read() : Этот метод считывает байт данных из этого входного потока и возвращает следующий байт данных или -1, если достигнут конец файла.
  7. чтение(байт[] b) : Этот метод считывает байт данных до длины указанного массива(b.длина) из этого входного потока в указанный массив байтов и возвращает общее количество байтов, считанных в буфер, или -1, если достигнут конец файла.
  8. чтение(байт[] b, int off, int len) : Этот метод считывает байты данных до указанной локальной сети из этого входного потока в указанный массив байтов. Если указанный len не равен нулю, метод блокируется до тех пор, пока не будут доступны некоторые входные данные; в противном случае байты не считываются и возвращается 0. Он возвращает количество байтов, считанных в буфер, или -1, если достигнут конец файла.
  9. пропустить(длинный n) : Этот метод пропускает и удаляет указанные n байтов данных из входного потока и возвращает фактическое количество пропущенных байтов. Это вызывает исключение IOException, если указанное n отрицательно.

5. Примеры потока ввода файлов Java

Давайте рассмотрим некоторые примеры программ для класса FileInputStream.

5.1) Чтение файла с помощью FileInputStream

package com.journaldev.examples;

import java.io.File;
import java.io.FileInputStream;

/**
 * Java Read file using FileInputStream
 * 
 * @author pankaj
 *
 */
public class ReadFileUsingFileInputStream {

	public static void main(String[] args) {
		File file = null;
		FileInputStream fileInputStream = null;
		try {
			file = new File("D:/data/file.txt");
			fileInputStream = new FileInputStream(file);
			System.out.println("Available bytes in file: "+fileInputStream.available());
			int line;
			while ((line=fileInputStream.read()) != -1) {
				System.out.print((char)line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileInputStream != null) {
					fileInputStream.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

}

Вывод :

Available bytes in file: 48
Hello world.
This is a FileInputStream Program.

Обратите внимание, что file.txt – это файл, используемый в вышеуказанной программе, и его содержимое распечатывается. Вы можете создать любой другой файл и запустить эту программу, внеся необходимые изменения.

Java 7 предоставляет try с ресурсом, который представляет собой оператор try, объявляющий один или несколько ресурсов. Ресурс-это объект, который должен быть закрыт после завершения работы с ним программы. Инструкция try with resource гарантирует, что каждый ресурс будет закрыт в конце инструкции.

Давайте взглянем на приведенный ниже пример программы с использованием try with resources.

package com.journaldev.examples;

import java.io.File;
import java.io.FileInputStream;

/**
 * Java Read file using FileInputStream with Try with Resource
 * 
 * @author pankaj
 *
 */
public class FileInputStreamTryWithResource {

	public static void main(String[] args) {
		File file = new File("D:/data/file.txt");
		try (FileInputStream fileInputStream = new FileInputStream(file)){
			System.out.println("Available bytes in file: "+fileInputStream.available());
			int line;
			while ((line=fileInputStream.read()) != -1) {
				System.out.print((char)line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Это даст тот же результат, что и предыдущая программа. Также проверьте текстовый файл чтения java для получения дополнительной информации о том, как читать текстовый файл на java.

5.2) доработать()

Метод FileInputStream finalize() гарантирует, что метод close() этого файла inputstream вызывается, когда на него больше нет ссылок.

Если мы попытаемся получить доступ к FileInputStream после вызова finalize(), мы получим исключение .

package com.journaldev.examples;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * Java FileInputStream Finalize method example
 * 
 * @author pankaj
 *
 */
public class FileInputStreamFinalizeExample extends FileInputStream{

	public FileInputStreamFinalizeExample(String name) throws FileNotFoundException {
		super(name);
	}

	public static void main(String[] args) {
		FileInputStreamFinalizeExample file = null;
		try {
			file = new FileInputStreamFinalizeExample("D:/data/file.txt"); 
			System.out.println("Available bytes in the file: "+file.available());
			int line;
			while ((line=file.read()) != -1) {
				System.out.print((char)line);
			}
			//calling finalize method
			file.finalize();
			System.out.println("\n");
			System.out.println("------After finalize called--------");
			System.out.println(file.available());
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (file != null) {
					file.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}

	}

}

Выходные данные вышеупомянутой программы приведены ниже:

Available bytes in the file: 48
Hello world.
This is a FileInputStream Program.

------After finalize called--------
java.io.IOException: Stream Closed
	at java.io.FileInputStream.available(Native Method)
	at com.journaldev.examples.FileInputStreamFinalizeExample.main(FileInputStreamFinalizeExample.java:31)

5.3) getFD()

FileInputStream getFD() возвращает объект FileDescriptor, представляющий соединение с фактическим файлом в файловой системе, используемой этим файловым потоком. Давайте рассмотрим приведенный ниже пример программы.

package com.journaldev.examples;

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;

/**
 * Java FileInputStream FileDescriptor Example
 * 
 * @author pankaj
 *
 */
public class FileInputStreamFileDescripterExample {

	public static void main(String[] args) {
		File file = new File("D:/data/file.txt");
		try (FileInputStream fileInputStream = new FileInputStream(file)){
			FileDescriptor fileDescriptor = fileInputStream.getFD();
			boolean valid = fileDescriptor.valid();
			System.out.println("Valid file: "+valid);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Результатом работы вышеуказанной программы является:

Valid file: true

5.4) чтение(байт[] b, int выкл, int len)

Этот метод считывает байты данных заданной длины из этого входного потока в указанный массив байтов. Если указанная длина не равна нулю, метод блокируется до тех пор, пока не будет доступен некоторый ввод; в противном случае байты не считываются и возвращается 0. Он возвращает количество байтов, считанных в буфер, или -1, если достигнут конец файла.

package com.journaldev.examples;

import java.io.FileInputStream;

/**
 * Java Read file using read(byte[] b, int off, int len) method
 * 
 * @author pankaj
 *
 */
public class FileInputStreamRead {

	public static void main(String[] args) {
		try (FileInputStream fileInputStream = new FileInputStream("D:/data/file.txt")) {
			byte[] b = new byte[10];
			int i = fileInputStream.read(b, 0, 8);
			System.out.println("Available bytes in file: " + fileInputStream.available());
			System.out.println("Number of bytes in read from file: " + i);
			for (byte bs : b) {
				char c = (char) bs;
				if (bs == 0) {
					c = '-';
				}
				System.out.print(c);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Вывод :

Available bytes in file: 40
Number of bytes in read from file: 8
Hello wo--

5.5) пропустить(длинный n)

Метод FileInputStream skip(long n) пропускает и удаляет указанные n байтов данных из входного потока и возвращает фактическое количество пропущенных байтов. Это вызывает исключение IOException, если указанное n отрицательно.

package com.journaldev.examples;

import java.io.FileInputStream;

/**
 * Java Read file with skip(long n) method example
 * 
 * @author pankaj
 *
 */
public class FileInputStreamSkip {

	public static void main(String[] args) {
		try (FileInputStream fileInputStream = new FileInputStream("D:/data/file.txt")) {
			System.out.println("Available bytes in the file: " + fileInputStream.available());
			int line;
			//skip 2 bytes
			fileInputStream.skip(2);
			System.out.println("Available bytes in the file after skip: " + fileInputStream.available());
			while ((line=fileInputStream.read()) != -1) {
				System.out.print((char)line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

Результатом приведенной выше программы является:

Available bytes in the file: 12
Available bytes in the file after skip: 10
llo world.

5.6) getChannel()

Этот метод возвращает уникальный объект FileChannel, связанный с этим входным потоком файла. Начальная позиция возвращаемого канала будет равна количеству байтов, считанных из файла, а чтение байтов из этого потока приведет к увеличению позиции канала.

package com.journaldev.examples;

import java.io.FileInputStream;
import java.nio.channels.FileChannel;

/**
 * Java Read file with getChannel method example
 * 
 * @author pankaj
 *
 */
public class FileInputStreamChannel {

	public static void main(String[] args) {
		FileInputStream fileInputStream = null;
		FileChannel fileChannel = null;
		try {
			fileInputStream = new FileInputStream("D:/data/file.txt");
			System.out.println("Available bytes in file: " + fileInputStream.available());
			int line;
			while ((line=fileInputStream.read()) != -1) {
				fileChannel = fileInputStream.getChannel();
				System.out.print("No of bytes read: "+fileChannel.position());
	            System.out.println("; Char read: "+(char)line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileInputStream != null) {
					fileInputStream.close();
				}
				if (fileChannel != null) {
					fileChannel.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}

}

Выход:

Available bytes in file: 12
No of bytes read: 1; Char read: H
No of bytes read: 2; Char read: e
No of bytes read: 3; Char read: l
No of bytes read: 4; Char read: l
No of bytes read: 5; Char read: o
No of bytes read: 6; Char read:  
No of bytes read: 7; Char read: w
No of bytes read: 8; Char read: o
No of bytes read: 9; Char read: r
No of bytes read: 10; Char read: l
No of bytes read: 11; Char read: d
No of bytes read: 12; Char read: .

Это все для Java FileInputStream, я надеюсь, что здесь не было пропущено ничего важного.

Ссылка: API Doc