CHNG 3 QUN L EXCEPTIONS NHP XUT Qun

  • Slides: 32
Download presentation
CHƯƠNG 3 QUẢN LÝ EXCEPTIONS & NHẬP XUẤT

CHƯƠNG 3 QUẢN LÝ EXCEPTIONS & NHẬP XUẤT

Quản lý Exception • Giới thiệu về Exception • Kiểm soát Exception • Ví

Quản lý Exception • Giới thiệu về Exception • Kiểm soát Exception • Ví dụ minh họa • Thư viện phân cấp các lớp Exception

Giới thiệu về Exception Ví dụ 1: … int x = 10; Dòng lệnh

Giới thiệu về Exception Ví dụ 1: … int x = 10; Dòng lệnh thứ 3 có lỗi chia cho 0, vì vậy đoạn chương trình kết thúc và dòng lệnh thứ 4 xuất kết quả ra màn hình không thực hiện được. int y = 0; float z = x/y; System. out. print("Ket qua la: " + z); …

Giới thiệu về Exception Ví dụ 2: … void docfile(String filename) { … File.

Giới thiệu về Exception Ví dụ 2: … void docfile(String filename) { … File. Input. Stream fin = new File. Input. Stream(filename); … } Dòng lệnh trên có khả năng xảy ra lỗi đọc file (chẳng hạn khi file không có trên đĩa)

Giới thiệu về Exception • Exception ü Dấu hiệu của lỗi trong khi thực

Giới thiệu về Exception • Exception ü Dấu hiệu của lỗi trong khi thực hiện chương trình ü ví dụ: lỗi chia cho 0, đọc file không có trên đĩa, … • Quản lý Exception (Expcetion handling) ü Kiểm soát được lỗi từ những thành phần chương trình ü Quản lý Exception theo 1 cách thống nhất trong những project lớn ü Hạn chế, bỏ bớt những đoạn source code kiểm tra lỗi trong chương trình.

Kiểm soát Exception Ví dụ 1: … try { int x = 10; int

Kiểm soát Exception Ví dụ 1: … try { int x = 10; int y = 0; float z = x/y; System. out. print("Ket qua la: " + z); } catch(Arithmetic. Exception e) { System. out. println(“Loi tinh toan so hoc”) } …

Kiểm soát Exception Ví dụ 2: … void docfile(String filename) throws IOException { …

Kiểm soát Exception Ví dụ 2: … void docfile(String filename) throws IOException { … File. Input. Stream fin = new File. Input. Stream(filename); … }

Kiểm soát Exception Hoặc … void docfile(String filename) { … try { … File.

Kiểm soát Exception Hoặc … void docfile(String filename) { … try { … File. Input. Stream fin = new File. Input. Stream(filename); … } catch (IOException e) { System. out. println(“Loi doc file”); } }

Kiểm soát Exception • Khi có lỗi phương thức sẽ ném ra một exception

Kiểm soát Exception • Khi có lỗi phương thức sẽ ném ra một exception • Việc kiểm soát exception giúp chương trình kiểm soát được những trường hợp ngoại lệ và xử lý lỗi. • Những lỗi không kiểm soát được sẽ có những ảnh hưởng bất lợi trong chương trình. • Dùng từ khóa throws để chỉ định những loại exception mà phương thức có thể ném ra. <tiền tố> <tên phương thức>(<đối số>) throws <các exceptions>

Kiểm soát Exception • Đoạn code có thể sinh ra lỗi cần đặt trong

Kiểm soát Exception • Đoạn code có thể sinh ra lỗi cần đặt trong khối lệnh bắt đầu bằng try. • Đoạn code để kiểm tra, xử lý trong trường hợp có lỗi xảy ra đặt trong khối lệnh catch. try { // Đoạn mã có thể sinh ra lỗi … } catch (<Kiểu Exception>){ // Đoạn mã kiểm soát lỗi }

Kiểm soát Exception • Khối lệnh đặt trong finally luôn được thực thi cho

Kiểm soát Exception • Khối lệnh đặt trong finally luôn được thực thi cho dù có Exception hay không. • Thường dùng để giải phóng tài nguyên try { // Đoạn mã có thể sinh ra lỗi … } Catch (<Kiểu Exception>) { // Đoạn mã kiểm soát lỗi } finally { // Đoạn mã luôn được thực thi }

Kiểm soát Exception try { // Khối lệnh trước dòng lệnh sinh ra lỗi

Kiểm soát Exception try { // Khối lệnh trước dòng lệnh sinh ra lỗi // Dòng lệnh sinh ra lỗi (Exception) … } catch (<Kiểu Exception>){ // Đoạn mã kiểm soát lỗi } finally { … } Khối lệnh sau dòng lệnh sinh ra lỗi sẽ bị bỏ qua và không thực hiện khi có exception

Ví dụ kiểm soát Exception: chia cho 0 import java. io. *; public class

Ví dụ kiểm soát Exception: chia cho 0 import java. io. *; public class Main. Class { public static void main(String[] args) { try { int num_1, num_2; Buffered. Reader in = new Buffered. Reader(new Input. Stream. Reader(System. in)); System. out. print("n Nhap so thu 1: "); num_1 = Integer. parse. Int(in. read. Line()); System. out. print("n Nhap so thu 2: "); num_2 = Integer. parse. Int(in. read. Line()); float rs = num_1/num_2; System. out. print("n Ket qua: " + rs); }

Ví dụ kiểm soát Exception: chia cho 0 catch (Arithmetic. Exception e) { System.

Ví dụ kiểm soát Exception: chia cho 0 catch (Arithmetic. Exception e) { System. out. print("Loi chia cho 0"); } catch (IOException e) { System. out. print("Loi xuat nhap"); } catch(Exception e) { System. out. print("Loi khac"); } System. out. print(“Kiem soat duoc loi hay Khong co loi"); } }

Thư viện các lớp Throwable Chương trình có thể bẫy Throwable Exception Runtime. Exception

Thư viện các lớp Throwable Chương trình có thể bẫy Throwable Exception Runtime. Exception Không bẫy bởi chương trình Error IOException AWTError Thread. Death Out. Of. Memory. Error • Có thể định nghĩa các exception mới bằng cách dẫn xuất (extends) từ những lớp Exception đang có.

LUỒNG & TẬP TIN (STREAMS & FILE)

LUỒNG & TẬP TIN (STREAMS & FILE)

NỘI DUNG n Dữ liệu lưu trong bộ nhớ & tập tin n Khái

NỘI DUNG n Dữ liệu lưu trong bộ nhớ & tập tin n Khái niệm về luồng n Các loại luồng: Luồng byte (byte stream) n Luồng ký tự (character stream) n Thư viện luồng & tập tin trong java n Xử lý tập tin và thư mục n Một số ví dụ minh họa n

Dữ liệu trong bộ nhớ & tập tin n Dữ liệu trong bộ nhớ

Dữ liệu trong bộ nhớ & tập tin n Dữ liệu trong bộ nhớ RAM n n 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 q Xử lý luồng & Xử lý File n Dữ liệu trong tập tin n n Tính chất lâu dài Dung lượng đĩa lớn hơn nhiều so với bộ nhớ RAM

Khái niệm về luồng n Luồng: là nơi có thể “sản xuất” và “tiêu

Khái niệm về luồng n 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ý. n 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)

Các loại luồng n Luồng byte (Byte Streams) (java. io) Hai lớp trừu tượng

Các loại luồng n 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 n Input. Stream n Output Stream n Luồng ký tự (Character Streams) (java. io) n Reader n Writer

Byte Stream Phương thức Input. Stream int available( ) Ý nghĩa Trả về số

Byte Stream Phương thức Input. Stream int available( ) Ý nghĩa 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 num. Bytes) Đánh dấu ở vị trí hiện tại trong luồng nhập boolean mark. Supported( ) 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[ ]) Đọc buffer. length bytes và lưu vào trong

Byte Stream 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 int read(byte buffer[ ], int offset, int num. Bytes) Đọc num. 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 num. Bytes) Nhảy qua num. Bytes dữ liệu từ luồng nhập

Byte Stream Output. Stream void close( ) Đóng luồng xuất và giải phóng tài

Byte Stream Output. Stream 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 num. Bytes) Ghi num. Bytes bytes dữ liệu từ vị trí offset của mảng chỉ định buffer xuống luồng

Ví dụ minh họa - Đọc dữ liệu từ Console import java. io. *;

Ví dụ minh họa - Đọc dữ liệu từ Console import java. io. *; class Read. Bytes { 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

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ừ File Viết chương trình cho

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 ô Text. Area 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

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 ô Text. Area và chọn 1 tập tin trên đĩa để lưu 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 n Sử dụng luồng

Ví dụ minh họa – Ghi dữ liệu ra File n Sử dụng luồng ký tự … try { f. Chooser. show. Save. Dialog(fr); File f = f. Chooser. get. Selected. File(); File. Writer fout = new File. Writer(f); String s. Content = m. Txt. Area. get. Text(); fout. write(s. Content); fout. close(); } catch(Exception ex) { … } …

Xử lý thư mục – Lớp File n java. lang. Object +--java. io. File

Xử lý thư mục – Lớp File n java. lang. Object +--java. io. File n 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, …) n

Xử lý thư mục – Lớp File n Các Constructor: n Tạo đối tượng

Xử lý thư mục – Lớp File n Các Constructor: n 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\vd 1. java”); n 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”, “vd 1. java”); n 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, “vd 1. java”);

Xử lý thư mục – Lớp File n Một số phương thức thường gặp

Xử lý thư mục – Lớp File n Một số phương thức thường gặp của lớp File public String get. Name() Lấy tên của đối tượng File public String get. Path() Lấy đường dẫn của tập tin public boolean is. Directory() Kiểm tra xem tập tin có phải là thư mục không? public boolean is. File() 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.