Lớp FileOutputStream
(Class FileOutputStream)

FileOutputStream là một lớp trong Java dùng để ghi dữ liệu vào file dưới dạng byte. Đây là một phần của luồng byte và thuộc gói java.io.

FileOutputStream chủ yếu được sử dụng để ghi dữ liệu thô, chẳng hạn như hình ảnh hoặc dữ liệu nhị phân, vào một file. Nếu bạn muốn ghi các ký tự văn bản, thì nên sử dụng FileWriter thay vì FileOutputStream.

Khả năng tạo hoặc mở một file để ghi phụ thuộc vào nền tảng hệ điều hành. Một số hệ điều hành chỉ cho phép một FileOutputStream (hoặc đối tượng ghi file khác) mở một file cùng lúc.

Khai báo lớp FileOutputStream trong Java

Để sử dụng lớp FileOutputStream, bạn cần import gói java.io bạn cần thêm câu lệnh import vào đầu file Java của mình. Gói này cung cấp các lớp và giao diện để thực hiện các hoạt động nhập xuất (I/O) trong Java.

Cú pháp câu lệnh import:

Cú pháp

import java.io.FileOutputStream;

Cú pháp khai báo lớp FileInputStream:

Cú pháp

public class FileOutputStream extends OutputStream

Dưới đây là giải thích chi tiết về cú pháp khai báo này:

↳ public class FileOutputStream: Đây là khai báo một lớp công khai (public) tên là FileOutputStream. Lớp này có thể được truy cập từ bất kỳ đâu trong dự án Java, miễn là nó được import hoặc ở cùng gói.

↳ extends OutputStream: Lớp FileOutputStream kế thừa từ lớp OutputStream. Điều này có nghĩa là FileOutputStream là một lớp con của OutputStream và kế thừa tất cả các phương thức và thuộc tính của OutputStream.

Các constructor của lớp FileOutputStream

Lớp FileOutputStream cung cấp 5 constructor khác nhau để tạo đối tượng và mở kết nối đến một file để ghi dữ liệu.

↳ FileOutputStream(File file): Tạo một luồng đầu ra để ghi vào file được đại diện bởi đối tượng File.

↳ FileOutputStream(File file, boolean append): Tạo một luồng đầu ra để ghi vào file được đại diện bởi đối tượng File. Nếu append là true, dữ liệu sẽ được ghi thêm vào cuối file, ngược lại sẽ ghi đè lên nội dung cũ.

↳ FileOutputStream(FileDescriptor fdObj): Tạo một luồng đầu ra sử dụng một FileDescriptor đã tồn tại, đại diện cho một kết nối đến file trong hệ thống file.

↳ FileOutputStream(String name): Tạo một luồng đầu ra để ghi vào file có tên là name.

↳ FileOutputStream(String name, boolean append): Tạo một luồng đầu ra để ghi vào file có tên là name. Nếu append là true, dữ liệu sẽ được

Lưu ý: Các constructor này có thể ném ngoại lệ FileNotFoundException nếu file không tồn tại hoặc không thể tạo. Nên sử dụng khối try-with-resources để đảm bảo đóng luồng một cách an toàn.

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

Lớp FileOutputStream cung cấp một số phương thức để ghi dữ liệu vào một file. Dưới đây là tóm tắt các phương thức chính của lớp FileOutputStream:

↳ void close(): Đóng luồng đầu ra và giải phóng tài nguyên liên quan.

↳ protected void finalize(): Phương thức được gọi tự động trước khi đối tượng bị thu hồi bộ nhớ, nhưng không nên sử dụng để đóng luồng.

↳ FileChannel getChannel(): Trả về đối tượng FileChannel liên kết với luồng này.

↳ FileDescriptor getFD(): Trả về đối tượng FileDescriptor đại diện cho kết nối với file.

↳ void write(byte[] b): Ghi toàn bộ mảng byte b vào file.

↳ void write(byte[] b, int off, int len): Ghi một phần của mảng byte b vào file, bắt đầu từ vị trí off và ghi len byte.

↳ void write(int b): Ghi một byte vào file.

Ví dụ 1

Dưới đây là một ví dụ đơn giản về cách sử dụng FileOutputStream để ghi dữ liệu vào một file trong Java:

Ví dụ: Example.java

import java.io.FileOutputStream;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        // Đường dẫn đến file cần ghi
        String filePath = "example.txt";

        // Nội dung cần ghi vào file
        String content = "Xin chào, thế giới!";

        // Sử dụng try-with-resources để tự động đóng FileOutputStream
        try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {
            // Ghi dữ liệu vào file dưới dạng byte
            fileOutputStream.write(content.getBytes());

            // In ra thông báo khi hoàn thành ghi dữ liệu
            System.out.println("Dữ liệu đã được ghi vào file.");
        } catch (IOException e) {
            // Xử lý lỗi khi ghi file
            e.printStackTrace();
        }
    }
}

Kết quả của chương trình là:

Dữ liệu đã được ghi vào file.

Khi bạn chạy chương trình, một file tên là example.txt sẽ được tạo trong thư mục gốc của dự án (nếu file này chưa tồn tại), và nội dung "Xin chào, thế giới!" sẽ được ghi vào file đó.

Nếu bạn mở file example.txt, bạn sẽ thấy nội dung này được ghi bên trong.

Ví dụ 2

Nếu bạn muốn ghi trực tiếp các giá trị byte vào file bằng FileOutputStream, bạn có thể sử dụng phương thức write(int b) của FileOutputStream. Dưới đây là một ví dụ:

Ví dụ: Example.java

import java.io.FileOutputStream;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        // Đường dẫn đến file cần ghi
        String filePath = "example.txt";

        // Tạo một mảng byte để ghi vào file
        byte[] byteData = {65, 66, 67, 68, 69}; // Tương ứng với các ký tự 'A', 'B', 'C', 'D', 'E'

        // Sử dụng try-with-resources để tự động đóng FileOutputStream
        try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)) {
            // Ghi từng byte vào file
            for (byte b : byteData) {
                fileOutputStream.write(b);
            }

            System.out.println("Dữ liệu byte đã được ghi vào file.");
        } catch (IOException e) {
            // Xử lý lỗi khi ghi file
            e.printStackTrace();
        }
    }
}

Kết quả của chương trình là:

Dữ liệu byte đã được ghi vào file.

Khi bạn chạy chương trình, một file tên là example.txt sẽ được tạo và các ký tự 'A', 'B', 'C', 'D', 'E' sẽ được ghi vào file dưới dạng byte.

Nếu bạn mở file example.txt, bạn sẽ thấy nội dung "ABCDE" được ghi bên trong. Đây là các ký tự tương ứng với các giá trị byte 65, 66, 67, 68, 69 trong bảng mã ASCII.

Một số điểm lưu ý:

Nếu file example.txt đã tồn tại và bạn mở nó bằng FileOutputStream, thì mọi dữ liệu trước đó trong file sẽ bị xóa. Chỉ có dữ liệu mới mà bạn ghi vào sẽ được lưu trong file. Nếu file example.txt đã có nội dung là "Xin chào, thế giới!", sau khi đoạn mã trên chạy, nội dung của file sẽ chỉ còn là "A".

Nếu bạn muốn giữ lại nội dung cũ và chỉ thêm dữ liệu mới vào cuối file, bạn cần mở FileOutputStream với tham số append là true. Trong trường hợp này, nếu file byteOutput.txt ban đầu chứa "Xin chào, thế giới!", sau khi chạy đoạn mã trên, file sẽ chứa "Xin chào, thế giới!B".

Dưới đây là một ví dụ đầy đủ về cách sử dụng FileOutputStream để ghi thêm dữ liệu vào cuối file:

Ví dụ: Example.java

import java.io.FileOutputStream;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        // Đường dẫn tới file cần ghi
        String filePath = "Example.txt";

        // Ghi thêm byte 'B' vào cuối file
        try (FileOutputStream fileOutputStream = new FileOutputStream(filePath, true)) {
            fileOutputStream.write(66);  // Mã ASCII của 'B'
            System.out.println("Đã ghi thêm ký tự 'B' vào cuối file.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Kết quả của chương trình là:

Đã ghi thêm ký tự 'B' vào cuối file.

Nội dung của file Example.txt sẽ là "Xin chào, thế giới!B".

Nếu file Exampletxt đã tồn tại từ trước và chứa nội dung khác, nội dung đó sẽ bị xóa và thay thế bằng "Xin chào, thế giới!", sau đó ký tự 'B' được thêm vào cuối.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”