chƯƠng 3 quẢn lÝ exceptions & nhẬp xuẤt

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

Upload: reia

Post on 17-Jan-2016

58 views

Category:

Documents


6 download

DESCRIPTION

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í dụ minh họa Thư viện phân cấp các lớp Exception. Giới thiệu về Exception. - PowerPoint PPT Presentation

TRANSCRIPT

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

CHƯƠNG 3

QUẢN LÝ EXCEPTIONS

& NHẬP XUẤT

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

• 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

Quản lý Exception

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

Giới thiệu về Exception

Ví dụ 1:

int x = 10;

int y = 0;

float z = x/y;

System.out.print("Ket qua la:" + z);

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.

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

Ví dụ 2:

void docfile(String filename)

{ …

FileInputStream fin = new FileInputStream(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

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

• 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.

Giới thiệu về Exception

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

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(ArithmeticException e) {

System.out.println(“Loi tinh toan so hoc”)

}

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

Ví dụ 2:

void docfile(String filename) throws IOException {

FileInputStream fin = new FileInputStream(filename);

}

Kiểm soát Exception

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

Hoặc

void docfile(String filename) { …

try {

FileInputStream fin = new FileInputStream(filename);

}

catch (IOException e) {

System.out.println(“Loi doc file”);

}

}

Kiểm soát Exception

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

• 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

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

• Đ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

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

• 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 luôn được thực thi

}

Kiểm soát Exception

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

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

Kiểm soát Exception

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

Ví dụ kiểm soát Exception: chia cho 0

import java.io.*;

public class MainClass {

public static void main(String[] args) {

try {

int num_1, num_2;

BufferedReader in = new BufferedReader(new

InputStreamReader(System.in));

System.out.print("\n Nhap so thu 1:");

num_1 = Integer.parseInt(in.readLine());

System.out.print("\n Nhap so thu 2:");

num_2 = Integer.parseInt(in.readLine());

float rs = num_1/num_2;

System.out.print("\n Ket qua:" + rs);

}

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

catch (ArithmeticException 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");

}

}

Ví dụ kiểm soát Exception: chia cho 0

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

Throwable

Exception Error

AWTError ThreadDeathIOExceptionRuntimeException OutOfMemoryError

Thư viện các lớp Throwable

Không bẫy bởi chương trình

Chương trình có thể bẫy

• 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ó.

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

LUỒNG & TẬP TIN

(STREAMS & FILE)

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

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

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

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ớn

hơn nhiều so với bộ nhớ RAM

Xử lý luồng & Xử lý File

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

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)

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

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

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

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

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

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

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

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

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

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]);}

}

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

Ví dụ minh họa - Đọc dữ liệu từ Console

Kết quả thực thi chương trình:

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

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.

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

Ví dụ minh họa - Đọc dữ liệu từ File

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

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.

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

Ví dụ minh họa – Ghi dữ liệu ra File

Sử dụng luồng ký tự…try {

fChooser.showSaveDialog(fr);

File f = fChooser.getSelectedFile();FileWriter fout = new FileWriter(f);String sContent = mTxtArea.getText();fout.write(sContent);fout.close();

}catch(Exception ex) {

…}…

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

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, …)

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

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”);

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

Xử lý thư mục – Lớp File

Một số phương thức thường gặp của lớp FileMộ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.