Lớp FileInputStream và FileOutputStream trong Java

Đây là bài 49/62 bài của series môn học Ngôn ngữ lập trình Java

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.

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 >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.