Trong bài viết này, chúng ta sẽ cùng tìm hiểu về lớp PrintStream trong Java và các phương thức print() và printf() cùng với các ví dụ dẫn chứng.
Lớp PrintStream
Lớp PrintStream trong Java, được bao gồm trong gói java.io, có thể được sử dụng để ghi dữ liệu đầu ra ở dạng thường có thể đọc được (văn bản) thay vì ở dạng byte. Nó kế thừa lớp trừu tượng OutputStream.
Cách thức hoạt động của PrintStream
Không giống như các luồng đầu ra khác, PrintStream chuyển đổi kiểu dữ liệu căn bản (int, char, float) thành định dạng văn bản thay vì dạng byte. Sau đó, nó ghi dữ liệu được định dạng đó vào luồng đầu ra. Ngoài ra, lớp PrintStream sẽ không đưa bất kỳ ngoại lệ cho đầu vào hay đầu ra nào. Thay vào đó, chúng ta sẽ sử dụng phương thức checkError() để tìm bất kỳ lỗi nào.
Chú ý: Lớp PrintStream cũng có tính năng tự động làm sạch. Điều này có nghĩa là nó bắt buộc luồng đầu ra ghi tất cả dữ liệu tới điểm đích với một trong các điều kiện sau:
- Nếu ký tự dòng mới \n được viết trong PrintStream.
- Nếu phương thức println() được gọi.
- Nếu một mảng các byte được viết vào trong PrintStream.
Tạo PrintStream
Để tạo PrintStream, trước tiên chúng ta phải thêm gói java.io.PrintStream. Sau khi thêm, sau đây là cách chúng ta có thể tạo PrintStream.
1. Sử dụng các luồng đầu ra khác
1 2 |
FileOutputStream file = new FileOutputStream(String path); PrintStream output = new PrintStream(file, autoFlush); |
- Chúng ta đã tạo một PrintStream sẽ ghi dữ liệu được định dạng vào tệp có kiểu FileOutputStream.
- autoFlush là một tham số boolean tùy chọn, chỉ định có thực hiện tính năng tự động Flush hay không.
2. Sử dụng tên tệp
1 |
PrintStream output = new PrintStream (String path, boolean autoFlush); |
- Chúng ta đã tạo một PrintStream sẽ ghi dữ liệu được định dạng vào tệp đã được chỉ định.
- autoFlush là một tham số boolean tùy chọn chỉ định có thực hiện tính năng tự động Flush hay không.
Chú ý: Trong cả hai trường hợp, PrintStream sẽ ghi dữ liệu vào tệp bằng cách sử dụng một số kiểu mã hóa ký tự mặc định. Tuy nhiên, chúng ta cũng có thể chỉ định kiểu mã hóa ký tự UTF8 hoặc UTF16.
1 |
PrintStream output = new PrintStream(String path, boolean autoFlush, Charset cs); |
Ở đây, chúng ta đã sử dụng lớp Charset để chỉ định kiểu mã hóa ký tự.
Các phương thức của PrintStream
Lớp PrintStream cung cấp các phương thức khác nhau cho phép chúng ta in dữ liệu cho đầu ra.
1. Phương thức print()
- Phương thức print(): In dữ liệu được chỉ định vào luồng đầu ra.
- Phương thức println(): In dữ liệu cho luồng đầu ra cùng với một ký tự xuống dòng ở cuối.
Ví dụ:
1 2 3 4 5 6 7 8 |
class Main { public static void main(String[] args) { String du_lieu = "Lap trinh Java"; System.out.print(du_lieu); System.out.println(du_lieu); System.out.print(du_lieu); } } |
Kết quả:
1 2 |
Lap trinh JavaLap trinh Java Lap trinh Java |
Trong ví dụ trên, chúng ta chưa tạo PrintStream. Tuy nhiên, chúng ta có thể sử dụng phương thức print() của lớp PrintStream. Vậy tại sao lại sử dụng được phương thức này?
Câu lệnh:
1 |
System.out.print(du_lieu); |
Trong đó:
- System là lớp cuối cùng chịu trách nhiệm thực hiện hoạt động đầu vào và đầu ra tiêu chuẩn.
- out là một biến của kiểu PrintStream được khai báo trong lớp System.
- Vì out thuộc kiểu PrintStream, chúng ta có thể sử dụng nó để gọi tất cả các phương thức của lớp PrintStream.
Ví dụ 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.io.PrintStream; class Main { public static void main(String[] args) { String du_lieu = "Lap trinh Java"; try { PrintStream output = new PrintStream("tek4.txt"); output.print(du_lieu); output.close(); } catch(Exception e) { e.getStackTrace(); } } } |
Kết quả trong file tek4.txt:
1 |
Lap trinh Java |
Trong ví dụ trên, chúng ta đã tạo một PrintStream có tên là ouput. PrintStream được liên kết với tệp tek4.txt.
1 |
PrintStream output = new PrintStream("tek4.txt"); |
Để in dữ liệu ra tệp, chúng ta đã sử dụng phương thức print(). Tại đây, khi chúng ta chạy chương trình, tệp tek4.txt sẽ chứa nội dung sau.
1 |
Lap trinh Java |
2. Phương thức printf()
Phương thức printf() có thể được sử dụng để in chuỗi được định dạng. Nó bao gồm 2 tham số: chuỗi được định dạng và các đối số.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.io.PrintStream; class Main { public static void main(String[] args) { try { PrintStream output = new PrintStream("tek4.txt"); String a = "Lap trinh Java"; output.printf("Chuoi ky tu la: %s", a); output.close(); } catch(Exception e) { e.getStackTrace(); } } } |
Kết quả trong file tek4.txt:
1 |
Chuoi ky tu la: Lap trinh Java |
Trong đó:
- “Chuoi ky tu la: %s” là một chuỗi được định dạng
- %s là dữ liệu kiểu chuỗi ký tự trong chuỗi được định dạng
- a là một đối số
Chuỗi được định dạng bao gồm cả văn bản và dữ liệu. Và, các đối số thay thế dữ liệu bên trong chuỗi được định dạng. Do đó,%s được thay thế bằng “Lap trinh Java”.
Trong ví dụ trên, chúng ta đã tạo một PrintStream có tên là output. PrintStream được liên kết với tệp tek4.txt.
1 |
PrintStream output = new PrintStream("tek4.txt"); |
Để in văn bản đã định dạng vào tệp, chúng ta đã sử dụng phương thức printf(). Sau khi chúng ta chạy chương trình, tệp tek4.txt sẽ chứa nội dung sau.
1 |
Chuoi ky tu la: Lap trinh Java |
3. Các phương thức khác
Phương thức | Mô tả |
close() | Đóng PrintStream. |
checkError() | Trả về giá trị kiểu Boolean nếu có lỗi trong luồng thực thi. |
append() | Thêm dữ liệu được chỉ định vào luồng. |
Trên đây là khái niệm và ví dụ cơ bản về lớp PrintStream 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!