Lớp OutputStreamWriter
(Class OutputStreamWriter)

Lớp OutputStreamWriter trong Java là một lớp chuyển đổi, thuộc gói java.io, dùng để chuyển đổi các ký tự (characters) thành các byte (bytes) và ghi chúng vào một luồng đầu ra (OutputStream). Nó thực hiện điều này bằng cách sử dụng một bảng mã nhất định (charset). Nói cách khác, OutputStreamWriter là một cầu nối giữa hệ thống xử lý ký tự của Java và hệ thống xử lý byte của luồng đầu ra.

Khai báo lớp OutputStreamWriter trong Java

Để sử dụng lớp OutputStreamWriter, 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.OutputStreamWriter;

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

Cú pháp

public class OutputStreamWriter
extends Writer

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

↳ public class OutputStreamWriter: Đây là khai báo một lớp công khai (public) tên là OutputStreamWriter. 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 Writer: Từ khóa extends cho biết rằng OutputStreamWriter là một lớp con (subclass) của lớp Writer. Điều này có nghĩa là OutputStreamWriter kế thừa tất cả các phương thức và thuộc tính của lớp Writer, đồng thời có thể thêm hoặc ghi đè các phương thức mới để cung cấp các chức năng cụ thể hơn. Lớp Writer là một lớp trừu tượng trong Java, đại diện cho các luồng ký tự đầu ra (character output stream).

Các Constructor của lớp OutputStreamWriter

Lớp OutputStreamWriter cung cấp bốn constructor để tạo đối tượng và thiết lập cách mã hóa dữ liệu:

↳ OutputStreamWriter(OutputStream out): Tạo một OutputStreamWriter sử dụng bảng mã mặc định của hệ thống để ghi vào luồng byte out.

↳ OutputStreamWriter(OutputStream out, Charset cs): Tạo một OutputStreamWriter sử dụng bảng mã cs để ghi vào luồng byte out.

↳ OutputStreamWriter(OutputStream out, CharsetEncoder enc): Tạo một OutputStreamWriter sử dụng bộ mã hóa CharsetEncoder để ghi vào luồng byte out.

↳ OutputStreamWriter(OutputStream out, String charsetName): Tạo một OutputStreamWriter sử dụng bảng mã có tên charsetName để ghi vào luồng byte out.

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

Các phương thức trong OutputStreamWriter cung cấp nhiều cách để ghi dữ liệu vào một luồng. Bạn có thể sử dụng chúng để ghi dữ liệu dưới dạng ký tự hoặc mảng ký tự, chuyển đổi ký tự thành byte bằng cách sử dụng mã hóa ký tự, và đảm bảo rằng dữ liệu được ghi hoàn tất vào luồng. Dưới đây là danh sách tất cả các phương thức của lớp OutputStreamWriter trong Java:

↳ void close(): Đóng luồng và giải phóng tài nguyên.

↳ void flush(): Buộc ghi dữ liệu đệm ra luồng đích.

↳ String getEncoding(): Trả về tên của bảng mã đang sử dụng.

↳ void write(char[] cbuf, int off, int len): Ghi một phần của mảng ký tự vào luồng.

↳ void write(int c): Ghi một ký tự vào luồng.

↳ void write(String str, int off, int len): Ghi một phần của một chuỗi vào luồng.

Ví dụ

Dưới đây là một ví dụ về cách sử dụng OutputStreamWriter để ghi dữ liệu vào một tệp văn bản:

Giả sử bạn muốn ghi chuỗi "Xin chào, thế giới!" vào một tệp tin tên là Example.txt:

Ví dụ: Example.java

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

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

        // Sử dụng try-with-resources để tự động đóng OutputStreamWriter sau khi hoàn thành
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(filePath), StandardCharsets.UTF_8)) {
            // Ghi dữ liệu vào tệp tin
            writer.write("Xin chào, thế giới!");
            writer.write("\nĐây là bài kiểm tra sử dụng OutputStreamWriter.");
        } catch (IOException e) {
            e.printStackTrace(); // In thông báo lỗi nếu xảy ra
        }
    }
}

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

Xin chào, thế giới!
Đây là bài kiểm tra sử dụng OutputStreamWriter.

Ví dụ này minh họa cách sử dụng OutputStreamWriter để ghi dữ liệu văn bản vào một tệp tin, với bảng mã UTF-8. OutputStreamWriter chuyển đổi các ký tự thành byte trước khi ghi, giúp bạn dễ dàng làm việc với dữ liệu văn bản trên các nguồn dữ liệu byte.

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

↳ Tạo tệp mới: Nếu tệp tin được chỉ định chưa tồn tại, FileOutputStream sẽ tạo một tệp mới với tên đã cho.

↳ Ghi đè dữ liệu cũ: Nếu tệp tin đã tồn tại, FileOutputStream sẽ mở tệp tin đó và bắt đầu ghi từ đầu, thay thế hoàn toàn nội dung cũ bằng nội dung mới mà bạn cung cấp.

↳ Nếu bạn muốn ghi tiếp (append) dữ liệu vào tệp mà không ghi đè nội dung cũ, bạn có thể sử dụng FileOutputStream với tham số thứ hai là true. Điều này sẽ mở tệp trong chế độ ghi tiếp, cho phép bạn thêm dữ liệu vào cuối tệp thay vì ghi đè dữ liệu cũ.

Ví dụ: Example.java

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;

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

        // Mở FileOutputStream với tham số thứ hai là true để bật chế độ ghi tiếp
        try (OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(filePath, true), StandardCharsets.UTF_8)) {
            writer.write("Dòng này sẽ được thêm vào tập tin.\n");
        } catch (IOException e) {
            e.printStackTrace(); // In thông báo lỗi nếu xảy ra
        }
    }
}

Khi chạy chương trình, một tệp tin tên là Example.txt sẽ được tạo ra với nội dung:

Xin chào, thế giới!
Đây là bài kiểm tra sử dụng OutputStreamWriter.
Dòng này sẽ được thêm vào tập tin.

Bằng cách sử dụng FileOutputStream với tham số thứ hai là true, bạn có thể dễ dàng ghi tiếp dữ liệu vào tệp mà không lo bị ghi đè nội dung trước đó.

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.”