Lập trình Java căn bản - Chương 5 Input – Output trong java

44 21 0
Lập trình Java căn bản - Chương 5 Input – Output trong java

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Mục tiêu: hiểu các khái niệm về dòng. Biết các lớp đảm nhiệm việc xuất nhập dữ liệu trong java. Biết cách sử dụng các lop81 io đề xuất dữ liệu.

Chương 05 INPUT – OUTPUT TRONG JAVA Mục tiêu Hiểu khái niệm dịng Biết lớp đảm nhiệm việc việc xuất nhập liệu Java Biết cách sử dụng lớp io ñể xuất nhập liệu với hình bàn phím Biết cách xuất nhập liệu với tập tin văn bản, tập tin chứa liệu thuộc kiểu bản, tập tin chứa liệu ñối tượng Biết interface lớp quản lý việc in ấn Nội dung 10.1- Giới thiệu 10.2- Dòng liệu 10.3- Gói java.io dịng nhập xuất 10.4- Lớp System thiết bị xuất nhập chuẩn 10.5 – Thí dụ xuất nhập liệu với tập tin văn 10.6- Tóm tắt 10.1- Giới thiệu • Nhập liệu tác vụ ñưa liệu cụ thể vào cho biến chương trình Như vậy, phải có nguồn chứa liệu (bàn phím, tập tin, biến khác) • Xuất liệu tác vụ đưa trị cụ thể biến chương trình nơi chứa (màn hình hay file hay biến khác) • Nhập/xuất liệu phương tiện mà chương trình tương tác với user thường khơng thể thiếu đa số ứng dụng Giới thiệu • Hai chế nhập xuất liệu có tương tác với user: (1) Nhập xuất liệu ứng dụng console application, (2) Nhập/xuất liệu thông qua phần tử GUI Cách thường dùng ứng dụng chạy theo chế cách ñược áp dụng ứng dụng hướng cửa sổ Giới thiệu • Buffered IO : Nhập xuất thơng qua đệm (một vùng vùng nhớ trung gian • Nhập có đệm (buffered Input) : Dữ liệu nhập đệm lại khơng vào biến Thí dụ: Nhập số kết thúc gõ enter • Xuất có đệm (buffered output): Dữ liệu xuất xuất thực ñệm ñầy gặp tác vụ buộc xuất tường minh (flush) Keyboard Buffer Variable Buffer Screen Giới thiệu • Tập tin liệu mơ tả cho thơng tin hồn tất Do vậy, tập tin liệu đầu vào chương trình nơi chứa liệu đầu chương trình Hầu hết chương trình lớn có thao tác với tập tin • Khi nhập xuất liệu gây lỗi Exception Thí dụ: Nhập biến số mà gõ chữ, đọc file vào biến mà vị trí ñọc cuối file, ghi file mà ñĩa ñã hết dung lượng,… Như vậy, xuất nhập liệu, người lập trình cần có biện pháp quản lý lỗi xuất nhập cú pháp try { TácVụNhậpXuất()} catch (Exception e) { System.out.println("Error: " + e.toString()); } 10.2- Dòng- stream • Dòng: Là chuỗi byte làm việc theo chế • Kh niệm dịng xuất phát từ hệ điều hành UNIX • Bàn phím dịng nhập chuẩn, user gõ phím chuỗi byte vào biến • Màn hình dịng xuất chuẩn, liệu từ biến ñược chuyển thành ký tự, ký số byte ñược xuất hình Chuỗi, mảng, file dịng • Chuỗi ký tự, mảng byte chứa liệu ñược chuyển vào cho biến làm việc theo chế chuyển byte Chuỗi, mảng dòng nhập Ngược lại, đưa liệu từ biến chuỗi, mảng Chuỗi, mảng trở thành dịng xuất • File nguồn cung cấp liệu cho biến (file nhập), nơi lưu trữ liệu từ biến (file xuất) File làm việc theo chế byte File dòng Buffer dòng : mảng lưu trữ liệu Dòng nhập Dòng xuất Buffer Buffer Các liệu quản lý Các liệu quản lý data Var1 Dữ liệu dịng xuất lại liệu dòng nhập khác data Buffer Các liệu quản lý Dòng nhập Buffer đóng vai trị trung chuyển liệu Var2 Buffer Các liệu quản lý data Dòng xuất 10.3- IO classes gói java.io Lớp trừu tượng java.io.InputStream Lớp trừu tượng java.io.OutputStream Dòng nhập byte vật lý Xử lý byte Dòng xuất byte vật lý Xử lý byte Biến / Đối tượng Dịng nhập ký tự Xử lý theo đơn vị byte Dịng xuất ký tự Xử lý theo đơn vị byte Lớp trừu tượng java.io.Reader Lớp trừu tượng java.io.Writer Phân cấp lớp nhập theo byte vật lý Phân cấp lớp xuất theo byte vật lý Phân cấp lớp nhập theo ký tự Phân cấp lớp xuất theo ký tự Phân cấp lớp thao tác file với hệ ñiều hành Lớp File giúp truy xuất thuộc tính file/thư mục Lớp FileDescriptor: Giúp ñồng việc truy xuất file Lớp RandomAccessFile giúp ñọc/ghi file với liệu thuộc kiểu Các interface ñược khai báo java.io 10.3.1- Các dòng trừu tượng byte-vật lý InputStream/OutputStream • Là hai lớp trừu tượng định nghĩa thao tác truy xuất liệu (mức khái quát) theo byte vật lý mà không phân biệt nguồn liệu loại (file, chuỗi,…) • Các lớp dẫn xuất từ hai lớp nhằm cụ thể hóa dịng nhập xuất byte vật lý tùy tình Abstract class InputStream Method Summary constructor InputStream() int available() : Trả số bytes cịn ñược ñọc (hay ñã bị bỏ qua) void close() : Đóng dịng, trả tài ngun liên kết với dịng void mark(int readlimit) – Đánh dấu vị trí hành, readlimit số byte đọc trước vị trí đánh dấu khơng cịn hợp lệ boolean markSupported() - Kiểm tra dịng có cho phép đánh dấu reset không? abstract int read() Đọc byte từ dòng int read(byte[] b) : Đọc dòng mảng byte int read(byte[] b, int off, int len) Đọc len bytes từ dòng lưu vào mảng b từ phần tử thứ off void reset() Quay trở lại vị trí vừa đánh dấu method mark long skip(long n) Bỏ qua n bytes liệu từ dòng Abstract OutputStream Method Summary constructor OutputStream() void close() – đóng dịng xuất, trả tài nguyên void flush() Cưỡng ghi liệu vào dòng xuất void write(byte[] b) : Ghi mảng byte lên dòng void write(byte[] b, int off, int len) Ghi len byte từ phần tử thứ off mảng lên dòng xuất abstract void write(int b) Ghi byte vào dòng xuất 10 Reader class class Reader Summary - throws IOException protected Object lock : Field ñược dùng ñể ñồng tác vụ dòng protected Reader() , contructor tạo dịng nhập ký tự có chế đồng protected Reader(Object lock) : Tạo dịng nhập với đối tượng đồng có abstract void close() – Đóng dịng void mark(int readAheadLimit) – Đánh dấu vị trí hành boolean markSupported() : Kiểm tra dịng có hỗ trợ tác vụ ñánh dấu? int read() - Đọc ký tự từ dòng int read(char[] cbuf) : Đọc mảng ký tự, trả ñọc ñược (-1 khi hết dòng) abstract int read(char[] cbuf, int off, int len) Đọc len ký tự lưu vào mảng cbuf từ vị trí off Trả số ký tự đọc ñược (-1 hết dòng) int read(CharBuffer target) Đọc ký tự ñưa vào buffer, trả số ký tự ñã ñọc ñược (-1 hết dòng) boolean ready() - Kiểm tra dịng có sẵn sàng để đọc hay bị khóa void reset() : Reset dịng vị trí ñánh dấu cuối có long skip(long n) - bỏ qua n ký tự class Writer Class Writer Summary protected Object lock (filed) The object used to synchronize operations on this stream protected Writer() Create a new character-stream writer whose critical sections will synchronize on the writer itself protected Writer(Object lock) Create a new character-stream writer whose critical sections will synchronize on the given object Writer Writer Writer append(char c) Appends the specified character to this writer append(CharSequence csq) Appends the specified character sequence to this writer append(CharSequence csq, int start, int end) subsequence of the specified character sequence to this writer abstract void close() Close the stream, flushing it first abstract void flush() Flush the stream void write(char[] cbuf) Appends a 30 10.3.11- Lớp BufferedReader BufferedWriter • Dịng nhập/xuất ký tự có sử dụng đệm • Giúp nhập xuất liệu theo dạng ký tự, dòng (line) ký tự Lớp BufferedReader 31 Lớp BufferedWriter 10.3.12- Lớp InputStreamReader Lớp OutputStreamReader • Các lớp cầu nối dịng vật lý dịng ký tự • InputStreamReader đọc byte vật lý chuyển thành ký tự • OutputStreamWriter ghi ký tự thành byte vật lý • Thường dùng cho bàn phím hình thiết bị ký tự, xuất nhập số (byte vật lý) CẦN CÓ SỰ CHUYỂN ĐỔI BYTE VẬT LÝ KÝ TỰ 32 Sử dụng kết hợp để có hiệu qủa Khai báo dịng nhập bàn phím: Gói InputStreamReader BufferedReader BufferedReader in = new BufferedReader(new InputStream(System.in)); Khai báo dịng xuất hình: Gói OutputStreamWriter BufferedWriter Writer out = new BufferedWriter(new OutputStreamWriter(System.out)); Lớp InputStreamReader 33 Lớp OutputStreamWriter Minh họa tự xây dựng lớp nhập liệu từ bàn phím (xuất liiệu có System.out.print( ) import java.io.*; class MyIO { static int ReadInt () throws java.io.IOException { int n=0; BufferedReader Obj = new BufferedReader(new InputStreamReader(System.in)); try { n= Integer.parseInt(Obj.readLine()); } catch (Exception e) { System.err.println(e.toString()); System.exit(0); } return n; } < Tương tự cho tác vụ nhập số long, float,double> 34 static char ReadChar () throws java.io.IOException { char x=0; Reader Obj = new InputStreamReader(System.in); try { x= (char) Obj.read(); } catch (Exception e) { System.err.println(e.toString()); System.exit(0); } return x; } static int ReadCharCode () throws java.io.IOException { return System.in.read(); } static String ReadString () throws java.io.IOException { String s; BufferedReader Obj = new BufferedReader(new InputStreamReader(System.in)); s=Obj.readLine(); while (s.length()==0) s=Obj.readLine(); return s; } } 10.3.13- Lớp FileReader FileWriter • Là lớp lớp InputStreamReader OutputStreamWriter tương ứng nên thừa kế cac1 khả chuyển ñổi ký tự byte • Giúp truy cập file 35 Lớp FileReader Lớp FileWriter 36 10.3.14- Lớp CharArrayReader Lớp CharArrayWriter • Hiện thực mảng ký tự (character buffer) cho việc nhập xuất public class CharArrayReader extends Reader public class CharArrayWriter extends Writer public class CharArrayReader extends Reader 37 public class CharArrayWriter extends Reader 10.3.15- Lớp StringReader StringWriter • Dịng nhập xuất thơng qua String 38 public class StringReader extends Reader public class StringWriter extends Writer 39 10.3.16- public class PrintWriter extends Writer • Làm nhiệm vụ xuất liệu bản, biểu diễn đối tượng có ñịnh dạng dòng xuất ký tự Lớp PrintWriter void print (x) ; void println(x) với x liệu đối tượng, String 40 10.4- Gói java.lang lớp System • Gói java.lang gói ngơn ngữ Java (language) • Gói chứa khai báo lớp wrapper Boolean, Char, Integer, • Có lớp System mơ tả cho hệ thống Gói java.lang subclasses: 41 public final class System extends Object • Data static PrintStream err :mô tả thiết bị xuất lỗi chuẩn (màn hình) static PrintStream out :mơ tả thiết bị xuất chuẩn (màn hình) static PrintStream in :mơ tả thiết bị nhập chuẩn (bàn phím) • Methods Các hành vi lớp System hành vi mức hệ thống truy xuất thời gian, truy xuất thiết lập hệ thống (trong Config.sys), thoát JVM, nạp lớp file, nạp thư viện, kết thúc object, thiết lập thiết bị nhập xuất hệ thống khác với thiết bị xuất nhập chuẩn, lấy/thiết lập chế bảo mật… public final class System extends Object Các method thường dùng: static long currentTimeMillis() lấy hệ thống theo millisec so với 12 ñêm ngày 1/1/1970 static long nanoTime() lấy hệ thống theo nanosec (chỉ có từ Java 1.5.0) static void exit(int status) kết thúc JVM static void gc(void) : gọi trình gom rác (garbage collector) static Properties getProperties(void) lấy thiết lập hệ thống (trong Config.sys) 42 Thí dụ truy xuất thơng tin hệ thống Gói java.util chứa lớp Date 10.5- Thí dụ xuất nhập liệu với tập tin văn • Tự tham khảo tài liệu class WriteFile , class IntMatrix 43 10.6 – Tóm tắt • Gói java.io chứa lớp cho việc xuất nhập liệu • Các dịng xuất nhập ñược chia thành loại: dòng văn bản, dòng byte vật lý • Dịng văn xử lý liệu theo ký tự byte • Dịng byte vật lý xử lý liệu theo byte • Tác vụ nhập xuất gây lỗi runtime nên cần throws IOException • Khi lưu trữ liệu vào dịng, cần chọn ñịnh dạng lưu trữ trước ñể phải ñọc ñọc ñược ñúng liệu 44 ...Nội dung 10. 1- Giới thiệu 10. 2- Dòng liệu 10. 3- Gói java. io dịng nhập xuất 10. 4- Lớp System thiết bị xuất nhập chuẩn 10 .5 – Thí dụ xuất nhập liệu với tập tin văn 10. 6- Tóm tắt 10. 1- Giới thiệu... BufferInputStream 22 Lớp BufferOutputStream 10.3. 8- DataInput interface DataOutput interface DataInputStream DataOutputStream • DataInput interface dùng ñể ñọc byte nhị phân từ dòng byte vật lý (InputStream)... DataInput interface DataOutput interface 24 Minh họa sử dụng DataInputStream DataOutputStream 10.3. 9- Interface ObjectInput ObjectOutput • Là interface DataInput DataOutput interfaces cho việc

Ngày đăng: 20/05/2021, 03:33

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan