Trong bài viết này, chúng ta sẽ cùng tìm hiểu về lớp FileInputStream trong Java và các phương thức của nó cùng với sự trợ giúp của các ví dụ dẫn chứng.
Lớp FileInputStream
Lớp FileInputStream của gói java.io có thể được sử dụng để đọc dữ liệu (tính ở dạng byte) từ tệp. Nó kế thừa lớp trừu tượng InputStream.
Tạo một FileInputStream
Để tạo FileInputStream, trước tiên chúng ta phải thêm gói java.io.FileInputStream. Và sau đây là hai cách mà chúng ta có thể tạo FileInputStream trong Java.
1. Sử dụng đường dẫn đến file
1 |
FileInputStream a = new FileInputStream(path); |
Ở đây, chúng ta đã tạo một luồng đầu vào sẽ được liên kết với tệp được chỉ định bởi đường dẫn.
2. Sử dụng một đối tượng của File
1 |
FileInputStream a = new FileInputStream(File obj); |
Ở đây, chúng ta đã tạo một luồng đầu vào sẽ được liên kết với tệp được chỉ định bởi doi_tuong.
Phương thức của lớp FileInputStream
Lớp FileInputStream cung cấp các triển khai cho các phương thức khác nhau có trong lớp InputStream.
1. Phương thức read()
- Phương thức read(): Đọc một byte từ file.
- Phương thức read(byte [] array): Đọc các byte từ tệp và lưu trữ trong mảng được chỉ định.
- Phương thức read(byte [] array, int start, int length): Đọc số lượng byte bằng chiều dài của tệp và lưu trữ trong mảng được chỉ định bắt đầu từ vị trí start.
Ví dụ:
Giả sử chúng ta có một tệp có tên tek4.txt với nội dung như sau.
1 |
Tim hieu ve lap trinh trong Java |
Ta sẽ thực hiện việc đọc nội dung từ file tek4.txt với đoạn mã như sau.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.FileInputStream; public class Main { public static void main(String args[]) { try { FileInputStream dau_vao = new FileInputStream("tek4.txt"); int i = dau_vao.read(); while(i != -1) { System.out.print((char)i); i = dau_vao.read(); } dau_vao.close(); } catch(Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 |
Tim hieu ve lap trinh trong Java cung voi tek4 |
Trong ví dụ trên, chúng ta đã tạo một luồng nhập có tên là dau_vao. Luồng đầu vào được liên kết với tệp tek4.txt.
1 |
FileInputStream dau_vao = new FileInputStream("tek4.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. Phương thức available()
Để tính số lượng các byte còn dư, chúng ta có thể sử dụng phương thức available().
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.FileInputStream; public class Main { public static void main(String args[]) { try { FileInputStream dau_vao = new FileInputStream("tek4.txt"); System.out.println("So luong Byte ban dau: " + dau_vao.available()); dau_vao.read(); dau_vao.read(); dau_vao.read(); System.out.println("So luong Byte luc sau: " + dau_vao.available()); dau_vao.close(); } catch (Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 2 |
So luong Byte ban dau: 46 So luong Byte luc sau: 43 |
Trong ví dụ trên:
- Trước tiên, chúng ta sử dụng phương thức available() để kiểm tra số lượng byte có sẵn trong luồng đầu vào.
- Sau đó, chúng ta đã sử dụng phương thức read() 3 lần để đọc 3 byte từ luồng đầu vào tệp. Sau khi đọc các byte, chúng ta kiểm tra các byte có sẵn còn lại. Lần này số byte có sẵn đã giảm đi 3 byte.
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 phương thức skip().
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.FileInputStream; public class Main { public static void main(String args[]) { try { FileInputStream dau_vao = new FileInputStream("tek4.txt"); dau_vao.skip(11); int i = dau_vao.read(); while (i != -1) { System.out.print((char) i); i = dau_vao.read(); } dau_vao.close(); } catch (Exception e) { e.getStackTrace(); } } } |
Kết quả:
1 |
lap trinh trong Java cung voi tek4 |
Trong ví dụ trên, chúng ta đã sử dụng phương thức skip() để bỏ qua 5 byte dữ liệu từ luồng đầu vào.
4. Phương thức close()
Để đóng luồng đầu vào, 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 ta đã sử dụng phương thức close() để đóng luồng đầu vào sau khi đọc xong dữ liệu.
5. Các phương thức khác
Phương thức | Mô tả |
finalize() | Đảm bảo phương thức close() được gọi. |
getChannel() | Trả về đối tượng FileChannel liên kết với luồng đầu vào. |
getFD() | Trả về file Descriptor 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 sẽ được đọc tới. |
reset() | Trả về control tới điểm trong luồng đầu vào mà vị trí đã được đánh dấu. |
Trên đây là khái niệm và ví dụ cơ bản về lớp FileInputStream trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!