LUỒNG & TẬP TIN
(STREAMS & FILES)
NỘI DUNG
Dữ liệu lưu trong bộ nhớ & tập tin
Khái niệm về luồng
Các loại luồng:
Luồng byte (byte stream)
Luồng ký tự (character stream)
Thư viện luồng & tập tin trong java
Xử lý tập tin và thư mục
Một số ví dụ minh họa
Dữ liệu trong bộ nhớ & tập tin
Dữ liệu trong bộ nhớ RAM
Tính chất tạm thời
Dung lượng bộ nhớ
RAM hạn chế hơn so
với đĩa cứng
Dữ liệu trong tập tin
Tính chất lâu dài
Dung lượng đĩa lớ
24 trang |
Chia sẻ: huongnhu95 | Lượt xem: 403 | Lượt tải: 0
Tóm tắt tài liệu Giáo trình Lập trình Java - Chương 3: Luồng và tập tin (streams và files), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ớn
hơn nhiều so với bộ
nhớ RAM
Xử lý luồng & Xử lý File
Khái niệm về luồng
InputStream
OutputStream
2 lớp trừu tượng InputStream và
OutputStream trong gói java.io
Khái niệm về luồng
Luồng: là nơi có thể “sản xuất” và “tiêu thụ” thông
tin. Luồng thường được hệ thống xuất nhập trong
java gắn kết với một thiết bị vật lý.
Tất cả những hoạt động nhập/xuất dữ liệu (nhập dữ
liệu từ bàn phím, lấy dữ liệu từ mạng về, ghi dữ liệu
ra đĩa, xuất dữ liệu ra màn hình, máy in, ) đều
được quy về một khái niệm gọi là luồng (stream)
Khái niệm về luồng
Có thể hiểu luồng là một lộ trình dữ liệu được truyền
trong chương trình.
Chức năng của luồng: vận chuyển dữ liệu từ nơi này
qua nơi khác. Các chương trình muốn chuyển dữ
liệu cho nhau phải tạo các luồng để gửi và nhận dữ
liệu.
Tất cả các task liên quan đến các lớp nhập xuất
trong java nếu có lỗi sẽ quăng ra một IOException.
Các loại luồng
Luồng byte (Byte Streams) (java.io)
Hai lớp trừu tượng ở mức trên cùng do Java
định nghĩa
InputStream
Output Stream
Luồng ký tự (Character Streams) (java.io)
Reader
Writer
Byte Stream
Phương thức Ý nghĩa
InputStream
int available( ) Trả về số luợng bytes có thể đọc được từ
luồng nhập
void close( ) Đóng luồng nhập và giải phóng tài nguyên
hệ thống gắn với luồng. Không thành công
sẽ ném ra một lỗi IOException
void mark(int numBytes) Đánh dấu ở vị trí hiện tại trong luồng nhập
boolean markSupported( ) Kiểm tra xem luồng nhập có hỗ trợ phương
thức mark() và reset() không.
int read( ) Đọc byte tiếp theo từ luồng nhập
Byte Stream
int read(byte buffer[ ], int
offset, int numBytes)
Đọc numBytes bytes bắt đầu từ địa chỉ offset
và lưu vào trong vùng nhớ buffer. Kết quả trả
về số bytes thật sự đọc được
void reset( ) Nhảy con trỏ đến vị trí được xác định bởi việc
gọi hàm mark() lần sau cùng.
long skip(long numBytes) Nhảy qua numBytes dữ liệu từ luồng nhập
int read(byte buffer[ ]) Đọc buffer.length bytes và lưu vào trong vùng
nhớ buffer. Kết quả trả về số bytes thật sự đọc
được
Byte Stream
OutputStream
void close( ) Đóng luồng xuất và giải phóng tài nguyên hệ
thống gắn với luồng. Không thành công sẽ
ném ra một lỗi IOException
void flush( ) Ép dữ liệu từ bộ đệm phải ghi ngay xuống
luồng (nếu có)
void write(int b) Ghi byte dữ liệu chỉ định xuống luồng
void write(byte buffer[ ]) Ghi buffer.length bytes dữ liệu từ mảng chỉ
định xuống luồng
void write(byte buffer[ ],
int offset,
int numBytes)
Ghi numBytes bytes dữ liệu từ vị trí offset
của mảng chỉ định buffer xuống luồng
Đọc dữ liệu từ bàn phím
(nhập thiết bị nhập chuẩn)
- Dùng luồng nhập chuẩn InputStream
Ví dụ minh họa - Đọc dữ liệu từ 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]);
}
}
Ví dụ minh họa - Đọc dữ liệu từ Console
Kết quả thực thi chương trình:
Ví dụ minh họa - Đọc dữ liệu từ Console
Dùng đối tượng Scanner (java.util.Scanner hỗ trợ từ
phiên bản jdk 1.5): một đối tượng scanner text đơn
giản có thể dùng để phân tích các chuỗi, kiểu dữ liệu
cơ sở dùng regular expressions.
Ví dụ minh họa - Đọc dữ liệu từ Console
import java.util.*;
public class ScannerInputDemo {
public static void main( String args[] ){
System.out.println(“Đọc dữ liệu từ bàn phím dùng Scanner ”);
Scanner scanner= new Scanner(System.in);
System.out.println(“Please enter your full name:”);
String fullname = scanner.nextLine();
System.out.println(“how old are you?”);
int age = scanner.nextInt();
Ví dụ minh họa - Đọc dữ liệu từ Console
System.out.println(“Hello “ + fullname + “.”);
System.out.println(“Are you “ + age + ” years old. Oh, really. You
are too young!”);
}
}
Ví dụ minh họa - Đọc dữ liệu từ File
Viết chương trình cho phép người dùng chọn mở 1 tập tin trên đĩa
và nạp nội dung của tập tin vào ô TextArea tương tự chức năng mở
đọc file của chương trình MS Notepad của Windows.
Ví dụ minh họa - Đọc dữ liệu từ File
Ví dụ minh họa - Đọc dữ liệu từ File
Ví dụ minh họa – Ghi dữ liệu ra File
Viết chương trình cho phép người dùng nhập dữ liệu vào ô TextArea
và chọn 1 tập tin trên đĩa để lưu nội dung nội dung đã nhập tương tự
chức ghi file của chương trình MS Notepad của Windows.
Ví dụ minh họa – Ghi dữ liệu ra File
Xử lý thư mục – Lớp File
java.lang.Object
+--java.io.File
Lớp File không phục vụ cho việc nhập/xuất dữ liệu
trên luồng. Lớp File thường được dùng để biết được
các thông tin chi tiết về tập tin cũng như thư mục
(tên, ngày giờ tạo, kích thước, )
Xử lý thư mục – Lớp File
Các Constructor:
Tạo đối tượng File từ đường dẫn tuyệt đối
public File(String pathname)
ví dụ: File f = new File(“C:\\Java\\vd1.java”);
Tạo đối tượng File từ tên đường dẫn và tên tập tin tách biệt
public File(String parent, String child)
ví dụ: File f = new File(“C:\\Java”, “vd1.java”);
Tạo đối tượng File từ một đối tượng File khác
public File(File parent, String child)
ví dụ: File dir = new File (“C:\\Java”);
File f = new File(dir, “vd1.java”);
Xử lý thư mục – Lớp File
Một số phương thức thường gặp của lớp File
public String getName() Lấy tên của đối tượng File
public String getPath() Lấy đường dẫn của tập tin
public boolean isDirectory() Kiểm tra xem tập tin có phải là thư mục không?
public boolean isFile() Kiểm tra xem tập tn có phải là một file không?
public String[] list() Lấy danh sách tên các tập tin và thư mục con của
đối tượng File đang xét và trả về trong một
mảng.
Các file đính kèm theo tài liệu này:
- giao_trinh_lap_trinh_java_chuong_3_luong_va_tap_tin_streams.pdf