File và I/O trong Java
Gói java.io chứa gần như tất cả các lớp bạn cần để thực hiện input và output (I/O) trong Java. Tất cả những stream này biểu diễn một nguồn input và một đích đến output. Stream trong java.io package hỗ trợ nhiều như liệu như các kiểu gốc, Object, các ký tự nội bộ, …
Một stream có thể được định nghĩa như là một dãy liên tục dữ liệu. InputStream được sử dụng để đọc dữ liệu từ một nguồn và OutputStream được sử dụng để ghi dữ liệu tới một đích đến.
Java cung cấp sự hỗ trợ mạnh mẽ nhưng linh hoạt cho I/O liên quan tới các File và các mạng nhưng trong phần hướng dẫn này, chúng tôi chỉ bàn luận tính năng cơ bản liên quan tới các stream và I/O. Chúng ta sẽ xem xét từng ví dụ được sử dụng phổ biến nhất.
Byte Stream trong Java
Byte Stream trong Java được sử dụng để thực hiện input và output của các byte (8 bit). Mặc dù có nhiều lớp liên quan tới byte stream nhưng các lớp thường được sử dụng nhất là: FileInputStream và FileOutputStream. Sau đây là một ví dụ sử dụng hai lớp này để sao chép một input file vào trong một output file:
import java.io.*; public class CopyFile { public static void main(String args[]) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("input.txt"); out = new FileOutputStream("output.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } }finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } }
Day la vi du ve sao chep file.
Trong bước tiếp theo, biên dịch chương trình trên và thực thi nó, sẽ cho kết quả là tạo một file là output.txt có cùng nội dung như chúng ta có trong input.txt. Vì thế, bạn đặt code trên vào trong CopyFile.java file và làm như sau:
$javac CopyFile.java $java CopyFile
Standard Stream trong Java
Tất cả các Ngôn ngữ lập trình cung cấp sự hỗ trợ cho I/O chuẩn, tại đây chương trình của người sử dụng có thể nhận đầu vào từ một bàn phím và sau đó tạo kết quả trên màn hình máy tính. Nếu bạn đã biết về các ngôn ngữ C/C++, thì bạn phải biết về 3 thiết bị chuẩn là STDIN, STDOUT, và STDERR. Theo cách tương tự, Java cung cấp 3 Standard Stream sau:
Sau đây là một chương trình đơn giản tạo InputStreamReader để đọc luồng đầu vào chuẩn tới khi người sử dụng gõ một "q".
import java.io.*; public class ReadConsole { public static void main(String args[]) throws IOException { InputStreamReader cin = null; try { cin = new InputStreamReader(System.in); System.out.println("Nhap cac ky tu, 'q' de thoat."); char c; do { c = (char) cin.read(); System.out.print(c); } while(c != 'q'); }finally { if (cin != null) { cin.close(); } } } }
$javac ReadConsole.java $java ReadConsole Nhap cac ky tu, 'q' de thoat. 1 1 e e q q
Như đã miêu tả trước đó, một Stream có thể được định nghĩa như là một dãy liên tục của dữ liệu. InputStream được sử dụng để đọc dữ liệu từ một nguồn và OutputStream được sử dụng để ghi dữ liệu tới một đích.
Dưới đây là một cấu trúc có thứ tự của các lớp để xử lý các luồng Input và Output.
Hai luồng quan trọng nhất là FileInputStream và FileOutputStream, sẽ được bàn luận sau đây:
FileInputStream trong Java:
Luồng này được sử dụng để đọc dữ liệu từ các file. Các đối tượng có thể được tạo bởi sử dụng từ khóa new và có một số kiểu constructor có sẵn.
Constructor sau đây nhận tên file như là một chuỗi để tạo một đối tượng Input Stream để đọc file:
InputStream f = new FileInputStream("C:/java/hello");
Constructor sau nhận một đối tượng File để tạo một đối tượng Input Stream để đọc file. Đầu tiên chúng ta tạo một đối tượng file bởi sử dụng phương thức File() như sau:
File f = new File("C:/java/hello"); InputStream f = new FileInputStream(f);
Khi chúng ta có đối tượng InputStream, thì khi đó có một danh sách các phương thức có thể được sử dụng để đọc stream hoặc để thực hiện hoạt động nào khác trên stream này.
STT | Phương thức và Miêu tả |
---|---|
1 | public void close() throws IOException{} Phương thức này đóng output stream. Giải phóng bất kỳ nguồn hệ thống nào liên kết với file. Ném một IOException |
2 | protected void finalize()throws IOException {} Phương thức này xóa sự kết nối tới File đó. Bảo đảm rằng phương thức close của output stream này được gọi khi không có tham chiếu nào nữa tới stream này. Ném một IOException |
3 | public int read(int r)throws IOException{} Phương thức này đọc byte dữ liệu đã xác định từ InputStream. Trả về một int. Trả về byte dữ liệu tiếp theo và -1 sẽ được trả về nếu kết thúc file. |
4 | public int read(byte[] r) throws IOException{} Phương thức này đọc r byte từ input stream vào trong một mảng. Trả về tổng số byte đã đọc. Nếu kết thúc file, -1 được trả về. |
5 | public int available() throws IOException{} Cung cấp số byte mà được đọc từ input stream này. Trả về một int |
Nhận xét
Đăng nhận xét