Lớp FileInputStream Và FileOutputStream Trong Java - Góc Học IT

1. Lớp FileInputStream trong Java

Lớp FileInputStream trong package java.io có thể được sử dụng để đọc dữ liệu (dạng byte) từ file. Lớp này kế thừa từ lớp abstract InputStream. Để sử dụng FileInputStream thì cần import java.io.FileInputStream.

Tạo ra một FileInputStream trong Java

1. Sử dụng đường dẫn của file

Chúng ta có thể tạo một input stream liên kết với một file thông qua đường dẫn của file.FileInputStream input = new FileInputStream(stringPath);

2. Sử dụng một đối tượng đại diện cho file

Chúng ta có thể tạo một input stream liên kết với một file thông qua đối tượng của File.FileInputStream input = new FileInputStream(File fileObject);

Các phương thức của lớp FileInputStream trong Java

Phương thức read()

  • read() đọc một byte từ file
  • read(byte[] array) đọc các byte từ file và lưu trữ các byte này vào một mảng (array)
  • read(byte[] array, int start, int length) đọc length số byte từ file và lưu trữ các byte đó trong một mảng (array) bắt đầu từ vị trí start của mảng byte

Giả sử có 1 file input.txt nằm trong phân vùng D có nội dung là “This is a line of text inside the file”. Chương trình bên dưới giúp đọc nội dung theo dạng byte từ file đó.import java.io.FileInputStream; public class Main { public static void main(String args[]) { byte[] arr = new byte[100]; try { FileInputStream input = new FileInputStream("D:\\input.txt"); System.out.println("Data in the file: "); //Đọc byte đầu tiên từ file int i = input.read(); while(i != -1) { System.out.print((char)i); //Đọc byte kế tiếp từ file i = input.read(); } input.close(); } catch(Exception e) { e.getStackTrace(); } } }

Kết quả
Data in the file: This is a line of text inside the file

Để lấy số byte còn có sẵn trong file mà chưa được đọc, chúng ta sử dụng hàm available().import java.io.FileInputStream; public class Main { public static void main(String args[]) { try { FileInputStream input = new FileInputStream("D:\\input.txt"); //Trả về số byte ban đầu chưa được đọc trong file System.out.println("Available bytes at the beginning: " + input.available()); //Đọc 3 byte từ file input.read(); input.read(); input.read(); //Trả về số byte chưa được đọc từ file System.out.println("Available bytes at the end: " + input.available()); input.close(); } catch (Exception e) { e.getStackTrace(); } } }

Kết quả
Available bytes at the beginning: 38 Available bytes at the end: 35

Để giải phóng và bỏ qua một số byte mà không cần đọc trong file thì có thể dùng hàm skip().import java.io.FileInputStream; public class Main { public static void main(String args[]) { try { FileInputStream input = new FileInputStream("D:\\input.txt"); //Bỏ qua 5 byte không cần đọc input.skip(5); System.out.println("Input stream after skipping 5 bytes:"); //Đọc byte đầu tiên cần đọc int i = input.read(); while (i != -1) { System.out.print((char) i); //Đọc byte kế tiếp từ file i = input.read(); } //hàm close() FileInputStream input.close(); } catch (Exception e) { e.getStackTrace(); } } }

Kết quả
Input stream after skipping 5 bytes: is a line of text inside the file

Rõ ràng, khi bỏ qua 5 bytes thì nội dung “This” trong file không được đọc và hiển thị ra màn hình. Và chúng ta nên đóng FileInputStream khi không cần đọc dữ liệu nữa với hàm close().

2. Lớp FileOutputStream trong Java

Lớp FileOutputStream trong package java.io có thể được sử dụng để ghi dữ liệu (dạng byte) từ file. Lớp này kế thừa từ lớp abstract OutputStream. Để sử dụng FileOutputStream thì cần import java.io.FileOutputStream.

Tạo một FileOutputStream

1. Sử dụng đường dẫn của file

Chúng ta có thể tạo một output stream liên kết với một file thông qua đường dẫn của file.//Sử dụng tham số boolean FileOutputStream output = new FileOutputStream(String path, boolean value); //Không sử dụng tham số boolean FileOutputStream output = new FileOutputStream(String path);

Tham số boolean value là tham số tùy chọn, có thể có hoặc không. Nếu tham số boolean value được thiết lập là true, dữ liệu mới ghi vào file sẽ được ghi nối tiếp vào cuối file, tức là file có cả dữ liệu cũ và mới. Nếu false thì dữ liệu cũ trong file sẽ bị mất (bị ghi đè bởi dữ liệu mới) và chỉ có dữ liệu mới trong file. Nếu không có tham số boolean value thì mặc định dữ liệu sẽ được ghi đè.

2. Sử dụng một đối tượng đại diện cho file

Chúng ta có thể tạo một output stream liên kết với một file thông qua đối tượng của File.FileOutputStream output = new FileOutputStream(File fileObject);

Các phương thức của lớp FileOutputStream

Phương thức write()

  • write() ghi một byte đến file output stream
  • write(byte[] array) ghi những byte từ một mảng đến the output stream
  • write(byte[] array, int start, int length) ghi length byte đến output stream từ một mảng bắt đầu tại vị trí start của mảng

Giả sử muốn tạo và ghi dữ liệu cho 1 file output.txt nằm trong phân vùng D với nội dung là “This is a line of text inside the file”. Chương trình bên dưới giúp ghi nội dung theo dạng byte cho file đó.import java.io.FileOutputStream; public class Main { public static void main(String[] args) { String data = "This is a line of text inside the file."; try { FileOutputStream output = new FileOutputStream("D:\\output.txt"); //đổi string thành byte để ghi vào file byte[] array = data.getBytes(); //Ghi byte vào file output.write(array); output.close(); } catch(Exception e) { e.getStackTrace(); } } }

Sau khi chạy xong chương trình trên, các bạn sẽ thấy một file output.txt được tạo trong phân vùng D chứa nội dung là “This is a line of text inside the file”.

Một hàm thường dùng của FileOutputStream là hàm flush(). Hàm này bắt buộc output stream ghi tất cả dữ liệu đến nơi cần lưu trữ (data destination).import java.io.FileOutputStream; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { FileOutputStream out = null; String data = "This is demo of flush method"; try { out = new FileOutputStream("D:\\flush.txt"); //Ghi dữ liệu out.write(data.getBytes()); //Sử dụng hàm flush() out.flush(); out.close(); } catch(Exception e) { e.getStackTrace(); } } }

Sau khi ghi dữ liệu xong, chúng ta nên sử dụng hàm close() để đóng FileOutputStream.

Lưu ý: Trong quá trình đọc hoặc ghi file thì đều có thể xảy ra ngoại lệ (exception). Chúng ta nên sử dụng try…catch để bắt ngoại lệ để không làm chương trình có thể kết thúc bất thường.

  • Hàm md5() trong PHP
  • Kỹ thuật lập trình với mảng 1 chiều trong Java
  • Kỹ thuật cấp phát bộ nhớ động và minh họa với C++
  • Thay thế chuỗi hoặc mảng với hàm str_replace() trong PHP
  • Lập trình điều khiển nhiều led với board mạch Arduino
5/5 - (1 bình chọn)Bài trước và bài sau trong môn học<< Lớp InputStream và OutputStream trong JavaLớp ObjectInputStream và ObjectOutputStream trong Java >>

Từ khóa » đọc File Trong Java Với Bufferedinputstream