Nhập xuất trong Java được phân loại
• Theo thứ tự truy xuất
Truy xuất ngẫu nhiên –Random Access Files: cho phép
đọc ghi tại bất kỳ vị trí nào
Truy xuất tuần tự: đọc ghi theo thứ tự
• Theo đặc điểm dữ liệu
Nhập xuất nhị phân (Nhập xuất byte)
Nhập xuất ký tự
19 trang |
Chia sẻ: lylyngoc | Lượt xem: 1662 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Chương 5 Nhập xuất, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH JAVA
Chương 5
NHẬP XUẤT
GV: Võ Hoàng Phương Dung
Giới thiệu
File
Random Access File
I/O stream
2/25
Nội dung
Nhập xuất trong Java được phân loại
• Theo thứ tự truy xuất
Truy xuất ngẫu nhiên – Random Access Files: cho phép
đọc ghi tại bất kỳ vị trí nào
Truy xuất tuần tự: đọc ghi theo thứ tự
• Theo đặc điểm dữ liệu
Nhập xuất nhị phân (Nhập xuất byte)
Nhập xuất ký tự
3/25
Giới thiệu
Các lớp nhập xuất trong Java
• Thuộc gói java.io.*
• Được tổ chức theo cấu trúc kế thừa
Cấp thấp: đọc ghi trực tiếp trên thiết bị
Cấp cao: đọc ghi thông qua bộ đệm
4/25
Giới thiệu
java.io.File
• Dùng để biểu diễn tên file hoặc thư mục
Hàm khởi tạo
• File(String pathname);
• File(String parent, String child);
• File(File parent, String child);
Ví dụ:
File file = new File("c:/aFolder/aFile.txt");
5/25
File
boolean exists(): kiểm tra có tồn tại tên file
hay thư mục
String getAbsolutePath(): lấy đường dẫn tuyệt
đối
String getName(): trả về tên file hay thư mục
String getParent(): trả về tên thư mục cha
boolean isDirectory(): kiểm tra thư mục
boolean isFile(): kiểm tra file
String[] list(): liệt kê file & thư mục con
6/25
File
boolean canRead(): kiểm tra file có thể đọc
boolean canWrite():kiểm tra file có thể ghi
boolean canExecute():kiểm tra file có thể thực
thi
boolean delete(): xoá file hoặc thư mục
long length(): trả lại chiều dài của đường dẫn
boolean mkdir(): tạo thư mục
boolean renameTo(File newname): đổi tên file
hoặc thư mục
7/25
File
Cho phép ta truy nhập trực tiếp vào các tệp, có
thể đọc, ghi các byte ở bất kỳ vị trí nào trong
tệp.
Hàm khởi tạo
• RandomAccessFile(String name, String
mode) throws IOException
• RandomAccessFile(File file, String mode)
throws IOException
Tham số mode:
-“r”: Dùng để đọc.
-“rw”: Dùng để ghi.
8/25
Random Access Files
Các phương thức
• long getFilePointer() throws IOException : Trả
về vị trí của con trỏ tệp.
• long length() throws IOException: cho biết số
byte hay độ dài của tệp.
• void seek(long offset) throws IOException:
Chuyển con trỏ tệp đi offset vị trí kể từ đầu tệp.
• void close() throws IOException: Khi không cần
truy nhập tệp nữa thì đóng lại.
9/25
Random Access Files
Stream là 1 dãy dữ liệu
Input stream cho việc đọc dữ liệu
Output stream cho việc ghi dữ liệu
10/25
I/O Stream
11/25
I/O Stream
Phân loại
• Luồng byte (Byte streams)
Đọc ghi dữ liệu theo đơn vị byte
Tất cả các lớp thừa kế từ: InputStream & OutputStream
• Luồng ký tự (Character streams)
Đọc ghi dữ liệu theo đơn vị ký tự
Tất cả các lớp thừa kế từ: Reader & Writer
12/25
I/O Stream
Ví dụ về luồng Byte
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(“input.txt");
out = new FileOutputStream(“byteOutput.txt");
int c;
while ((c = in.read()) != -1) {out.write(c); }
}
finally {
if (in != null) { in.close(); }
if (out != null) { out.close(); }
}
}
13/25
I/O Stream
14/25
I/O Stream
Ví dụ về luồng ký tự
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyCharacters {
public static void main(String[] args) throws IOException {
FileReader in = null;
FileWriter out = null;
try {
in = new FileReader(“input.txt");
out = new FileWriter(“characterOutput.txt");
int c;
while ((c = in.read()) != -1){ out.write(c); }
}
finally {
if (in != null) { in.close(); }
if (out != null){ out.close(); }
} } }
15/25
I/O Stream
Các lớp cơ bản của luồng Byte
16/25
I/O Stream
Tên lớp Ý nghĩa
FileInputStream Luồng nhập cho phép đọc dữ liệu từ File
FileOutputStream Luồng xuất cho phép ghi dữ liệu xuống File
ByteArrayInputStream Luồng nhập dữ liệu từ 1 mảng byte
ByteArrayOutputStream Luồng xuất dữ liệu ra 1 mảng byte
ObjectInputStream Luồng nhập các Object
ObjectOutputStream Luồng xuất các Object
BufferedInputStream Luồng nhập có đệm
BufferedOutputStream Luồng xuất có đệm
DataInputStream Luồng nhập dữ liệu là các kiểu dữ liệu chuẩn
DataOutputStream Luồng xuất dữ liệu là các kiểu dữ liệu chuẩn
Các lớp cơ bản của luồng ký tự
17/25
I/O Stream
Tên lớp Ý nghĩa
BufferedReader Luồng nhập có đệm
BufferedWriter Luồng xuất có đệm
CharArrayReader Luồng nhập dữ liệu từ 1 mảng ký tự
CharArrayWriter Luồng xuất dữ liệu ra 1 mảng ký tự
InputStreamReader Luồng nhập chuyển luồng byte thành luồng ký tự
OutputStreamWriter Luồng xuất chuyển luồng ký tự thành luồng byte
StringReader Luồng đọc dữ liệu từ chuỗi
StringWriter Luồng xuất dữ liệu ra chuỗi
FileReader Luồng đọc dữ liệu từ File
FileWriter Luồng xuất dữ liệu ra File
LineNumberReader Luồng nhập đếm dòng
PrintWriter Luồng xuất có định dạng
Nhập dữ liệu từ màn hình Console
import java.io.*;
class ReadBytes {
public static void main(String args[])
throws IOException {
byte data[] = new byte[100];
System.out.print("Enter some
characters.");
System.in.read(data);
System.out.print("You entered: ");
for(int i=0; i < data.length; i++)
System.out.print((char) data[i]);
}
}
18/25
I/O Stream
import java.io.*;
class ReadBuffer {
public static void main(String args[]) throws
IOException {
BufferedReader in=new BufferedReader (new
InputStreamReader(System.in));
System.out.println("NHAP A:");
int a=Integer.parseInt (in.readLine());
System.out.println("NHAP B:");
int b=Integer.parseInt (in.readLine());
int ketqua;
ketqua=a+b;
System.out.println("ket qua bai toan a+b
la:"+ketqua);
}
}
19/25
I/O Stream