FileInputStream dùng để đọc dữ liệu theo luồng byte có thứ tự. FileInputStream thường để đọc các luồng dữ liệu thô như là hình ảnh, text etc.
Khởi tạo FileInputStream
- FileInputStream(File file) :Khởi tạo FileInputStream từ một file instance.
- FileInputStream(FileDescriptor fdobj) Khởi tạo FileInputStream từ FileDescriptor.
- FileInputStream(String name) :Khởi tạo FileInputStream từ File theo đường dẫn được chỉ định.
Các method trong FileInputStream
int read()
Đọc dữ liệu từ FileInputStream theo từng byte, nghĩa là mỗi lần đọc chỉ đọc được 1 byte.
Syntax: public int read() throws IOException Returns: Method read() trả về -1 thông báo đã đọc hết dữ liệu từ FileInputStream. Throws:IOException
int read(byte[] b)
Đọc dữ từ FileInputStream vào mảng byte được cung cấp. read(byte[] b) sẽ cố gắng đọc nhiều byte nhất vào mảng dựa theo b.length. Nếu sức chứa của b nhiều hơn số byte từ FileInputStream thì phần rỗng còn lại sẽ được lặp lại giống như phần đầu của b cho đến hết mảng.
Syntax:public int read(byte[] b) throws IOException Parameters: b - mảng chứa dữ liệu được đọc vào. Returns: Tổng số byte đọc được vào mảng b hoặc -1 để báo hiệu tất cả dữ liệu đã được đọc xong. Throws:IOException
read(byte[], int off, int len)
Đọc dữ từ FileInputStream vào mảng byte được cung cấp. read(byte[] b) sẽ cố gắng đọc nhiều byte nhất vào mảng dựa theo b.length. Vị trí đọc sẽ bắt đầu từ off và đọc tối đa len byte.
Syntax: public int read(byte[] b, int off, int len) throws IOException Parameters: b - Mảng chứa dữ liệu đọc được từ FileInputStream. off - Vị trí bắt đầu đọc tron FileInputStream len - Số lượng byte tối đa được đọc Returns: Số byte đọc được, hoặc -1 nếu đã được hết từ FileInputStream. Throws: NullPointerException IndexOutOfBoundsException
long skip(long n)
Bỏ qua và loại bỏ n byte từ FileInputStream.
Syntax:public long skip(long n) throws IOException Parameters: n - Số byte bỏ qua. Returns: Số byte thật được bỏ qua Throws: IOException
int available()
Trả về số lượng byte còn lại có thể đọc được
Syntax:public int available() throws IOException Returns: Số byte còn lại có thể đọc được Throws: IOException
void close()
Đóng kết nối của FileInputStream với các tài nguyên mà nó đang tham chiếu đến.
Syntax:public void close() throws IOException
FileDescriptor getFD()
Trả về một FileDescriptor object của tài nguyên đang được FileInputStream kết nối đến.
Syntax :public final FileDescriptor getFD() throws IOException Returns: FileDescriptor Throws: IOException
FileChannel getChannel()
Trả về FileChannel object duy nhất được liên kết với FileInputStream.
Syntax :public FileChannel getChannel() Returns: FileChannel object
void finalize()
Đảm bảo rằng close() method được gọi và FileInputStream không còn tham chiếu đến tài nguyên nào.
Các bước đọc dữ liệu từ FileInputStream
Để đọc dữ liệu từ FileInputStream
B1: Khởi tạo FileInputStream với file mà chúng cần liên kết
InputStream fileInputStream =new FileInputStream(“file.txt”);
B2: Đọc dữ liệu, chúng ta có thể sử dụng các method read() được nêu ở trên.
ch=fileInputStream.read();
Ví dụ FileInputStream
Ví dụ 1: Tổng về các method trong FileInputStream
import java.io.*; class ReadFile { public static void main(String args[]) { //attach the file to FileInputStream try (FileInputStream fin = new FileInputStream("file1.txt")) { //illustrating getChannel() method System.out.println(fin.getChannel()); //illustrating getFD() method System.out.println(fin.getFD()); //illustrating available method System.out.println("Number of remaining bytes:" + fin.available()); //illustrating skip method /*Original File content: * This is my first line * This is my second line*/ fin.skip(4); System.out.println("FileContents :"); //read characters from FileInputStream and write them int ch; while ((ch = fin.read()) != -1) System.out.print((char) ch); } catch (IOException e) { e.printStackTrace(); } } }
Output:
sun.nio.ch.FileChannelImpl@1540e19d java.io.FileDescriptor@677327b6 Number of remaining bytes:45 FileContents : is my first line This is my second line
Ví dụ 2: Đọc từng ký tự trong file text với FileInputStream
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { try (FileInputStream fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt")) { System.out.println("FileContents :"); //read characters from FileInputStream and write them int ch; while ((ch = fin.read()) != -1) System.out.print((char) ch); } catch (IOException e) { e.printStackTrace(); } } }
Ví dụ 3: Đọc một mảng ký tự trong file text với FileInputStream
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) throws IOException { try (FileInputStream fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt")) { System.out.println("FileContents :"); //read characters from FileInputStream and write them byte[] bytes = new byte[5]; // So byte doc duoc tu FileInputStream int bytesReaded = fin.read(bytes); while (bytesReaded != -1) { for (int i = 0; i < bytesReaded; i++) { System.out.print((char) bytes[i]); } bytesReaded = fin.read(bytes); } } catch (IOException e) { e.printStackTrace(); } } }
Ví dụ 4: Đọc từng dòng trong file text với FileInputStream
import java.io.FileInputStream; import java.io.IOException; class ReadFile { public static void main(String args[]) { try (FileInputStream fin = new FileInputStream("/Users/nguyenthanhhai/Desktop/test.txt")) { int data = fin.read(); StringBuilder line = new StringBuilder(); while (data != -1) { if (((char) data == '\n') || ((char) data == '\r')) { System.out.println("New line: " + line.toString()); line.delete(0, line.length()); data = fin.read(); continue; } line.append((char) data); data = fin.read(); } System.out.println("New line: " + line.toString()); } catch (IOException e) { e.printStackTrace(); } } }
Nguồn tham khảo:
https://www.geeksforgeeks.org/java-io-fileinputstream-class-java/