Trong hướng dẫn này, chúng ta sẽ tìm hiểu về FileInputStream trong Java và các phương thức của nó với sự trợ giúp của các ví dụ.

lớp FileInputStream của gói java.io có thể được sử dụng để đọc dữ liệu (tính theo byte) từ các tập tin.

Nó mở rộng lớp InputStream trừu tượng.

Trước khi chúng ta tìm hiểu về FileInputStream, hãy chắc chắn rằng bạn đã biết về Tệp Java .

1. Tạo một FileInputStream

Để tạo luồng nhập tệp, trước tiên chúng ta phải nhập gói java.io.FileInputStream. Sau khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo luồng nhập tệp trong Java.

1. Sử dụng đường dẫn đến tệp

FileInputStream input = new FileInputStream(stringPath);

Ở đây, chúng tôi đã tạo một luồng đầu vào sẽ được liên kết với tệp được chỉ định bởi con đường.

2. Sử dụng một đối tượng của tệp

FileInputStream input = new FileInputStream(File fileObject);

Ở đây, chúng tôi đã tạo một luồng đầu vào sẽ được liên kết với tệp được chỉ định bởi fileObject.

2. Phương thức của FileInputStream

lớp FileInputStream cung cấp triển khai cho các phương thức khác nhau trình bày trong lớp InputStream.

2.1 phương thức read()

  • read() – đọc một byte đơn từ tệp
  • read(byte[] array) – đọc các byte từ tệp và lưu trữ trong mảng được chỉ định
  • read(byte[] array, int start, int length) – đọc số byte bằng chiều dài từ tệp và lưu trữ trong mảng được chỉ định bắt đầu từ vị trí khởi đầu

Giả sử chúng ta có một tệp có tên input.txt với nội dung như sau.

This is a line of text inside the file.

Hãy thử đọc tệp này bằng cách sử dụng FileInputStream.

import java.io.FileInputStream;

public class Main {

  public static void main(String args[]) {

     try {
        FileInputStream input = new FileInputStream("input.txt");

        System.out.println("Data in the file: ");

        // Reads the first byte
        int i = input.read();

       while(i != -1) {
           System.out.print((char)i);

           // Reads next byte from the file
           i = input.read();
        }
        input.close();
     }

     catch(Exception e) {
        e.getStackTrace();
     }
  }
}

Đầu ra

Data in the file:
This is a line of text inside the file.

Trong ví dụ trên, chúng ta đã tạo một luồng đầu vào tệp có tên đầu vào. Luồng đầu vào được liên kết với tệp input.txt .

FileInputStream input = new FileInputStream(“input.txt”);

Để đọc dữ liệu từ tệp, chúng ta đã sử dụng phương thức read() bên trong vòng lặp while.

2.2 phương thức available()

Để lấy số byte có sẵn, chúng ta có thể sử dụng phương thức available(). Ví dụ,

import java.io.FileInputStream;

public class Main {

   public static void main(String args[]) {

      try {
         // Suppose, the input.txt file contains the following text
         // This is a line of text inside the file.
         FileInputStream input = new FileInputStream("input.txt");

         // Returns the number of available bytes
         System.out.println("Available bytes at the beginning: " + input.available());

         // Reads 3 bytes from the file
         input.read();
         input.read();
         input.read();

         // Returns the number of available bytes
         System.out.println("Available bytes at the end: " + input.available());

         input.close();
      }

      catch (Exception e) {
         e.getStackTrace();
      }
   }
}

Đầu ra

Trong ví dụ trên,

  1. Trước tiên, chúng tôi sử dụng phương thức available() để kiểm tra số lượng byte có sẵn trong luồng nhập tệp.
  2. Sau đó, chúng tôi đã sử dụng phương thức read()3 lần để đọc 3 byte từ luồng đầu vào tệp.
  3. Bây giờ, sau khi đọc các byte, chúng tôi lại kiểm tra các byte có sẵn. Lần này số byte khả dụng giảm đi 3.

2.3 phương thức skip()

Để loại bỏ và bỏ qua số byte được chỉ định, chúng ta có thể sử dụng skip()phương thức. Ví dụ,

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

import java.io.FileInputStream;

public class Main {

   public static void main(String args[]) {

      try {
         // Suppose, the input.txt file contains the following text
         // This is a line of text inside the file.
         FileInputStream input = new FileInputStream("input.txt");

         // Skips the 5 bytes
         input.skip(5);
         System.out.println("Input stream after skipping 5 bytes:");

         // Reads the first byte
         int i = input.read();
         while (i != -1) {
            System.out.print((char) i);

            // Reads next byte from the file
            i = input.read();
         }

         // close() method
         input.close();
      }
      catch (Exception e) {
         e.getStackTrace();
      }
   }
}

Đầu ra

Input Stream after skipping 5 bytes:
is a line of text inside the file.

Trong ví dụ trên, chúng tôi đã sử dụng phương thức skip() để bỏ qua 5 byte dữ liệu từ luồng đầu vào tệp. Do đó, các byte đại diện cho văn bản “This” không được đọc từ luồng đầu vào.

2.4 phương thức close()

Để đóng luồng nhập tệp, chúng ta có thể sử dụng phương thức. close() Khi phương thức close() được gọi, chúng ta không thể sử dụng luồng đầu vào để đọc dữ liệu.

Trong tất cả các ví dụ trên, chúng tôi đã sử dụng phương thức close() để đóng luồng nhập tệp.

3. Các phương thức khác của FileInputStream

Phương thứcMô tả
finalize()đảm bảo rằng phương thức close() được gọi
getChannel()trả về đối tượng của được FileChannel liên kết với luồng đầu vào
getFD()trả về bộ mô tả tệp được liên kết với luồng đầu vào
mark()đánh dấu vị trí trong luồng đầu vào mà dữ liệu đã được đọc
reset()trả lại điều khiển về điểm trong luồng đầu vào nơi đặt dấu

Để tìm hiểu thêm, hãy truy cập Java FileInputStream (tài liệu Java chính thức) .

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!