Giáo trình môn học: Lập trình java (Ngành/nghề: Thiết kế trang web) - Trường CĐN Đà Lạt

98 21 0
Giáo trình môn học: Lập trình java (Ngành/nghề: Thiết kế trang web) - Trường CĐN Đà Lạt

Đ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

Giáo trình Lập trình java giúp cung cấp cho người học những kiến thức cơ bản về ngôn ngữ lập trình Java cũng như kỹ năng lập trình giao diện người dùng theo phương pháp hướng đối tượng. Để học được mô đun này người học cần có kiến thức cơ bản về lập trình cơ bản.

ỦY BAN NHÂN DÂN TỈNH LÂM ĐỒNG TRƢỜNG CAO ĐẲNG NGHỀ ĐÀ LẠT GIÁO TRÌNH MƠN HỌC/ MƠ ĐUN: LẬP TRÌNH JAVA NGÀNH/ NGHỀ: THIẾT KẾ TRANG WEB TRÌNH ĐỘ: CAO ĐẲNG Ban hành kèm theo Quyết định số: 1157/QĐ-CĐNĐL ngày 11 tháng 12 năm 2019 Hiệu trưởng Trường Cao đẳng Nghề Đà Lạt (LƢU HÀNH NỘI BỘ) Lâm Đồng, năm 2019 TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin đƣợc phép dùng ngun trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm Giáo trình đƣợc lƣu hành nội Trƣờng Cao đẳng Nghề Đà Lạt Trang LỜI GIỚI THIỆU Vài nét xuất xứ giáo trình: Giáo trình đƣợc viết theo Thông tƣ số 03/2017/TT-BLĐTBXH ngày 01 tháng 03 năm 2017 Bộ Lao động – Thƣơng binh Xã hội việc Quy định quy trình xây dựng, thẩm định ban hành chƣơng trình; tổ chức biên soạn, lựa chọn, thẩm định giáo trình đào tạo trình độ trung cấp, trình độ cao đẳng Quá trình biên soạn: Giáo trình đƣợc biên soạn có tham gia tích cực giáo viên có kinh nghiệm, với ý kiến đóng góp quý báu chuyên gia lĩnh vực công nghệ thông tin Mối quan hệ tài liệu với chương trình, mơ đun/mơn học: Căn vào chƣơng trình đào tạo nghề Thiết kế trang web, giáo trình giúp cung cấp cho ngƣời học kiến thức ngơn ngữ lập trình Java nhƣ kỹ lập trình giao diện ngƣời dùng theo phƣơng pháp hƣớng đối tƣợng Để học đƣợc mô đun ngƣời học cần có kiến thức lập trình Cấu trúc chung giáo trình bao gồm chương: CHƢƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ NGƠN NGỮ LẬP TRÌNH JAVA CHƢƠNG NỀN TẢNG CỦA JAVA CHƢƠNG 3: LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG TRONG JAVA CHƢƠNG 4: THIẾT KẾ GIAO DIỆN NGƢỜI DÙNG CHƢƠNG 5: LUỒNG VÀ TẬP TIN Lời cảm ơn Giáo trình đƣợc biên soạn sở văn quy định Nhà nƣớc tham khảo nhiều tài liệu liên quan có giá trị Song hẳn q trình biên soạn khơng tránh khỏi thiếu sót định Ban biên soạn mong muốn thực cảm ơn ý kiến nhận xét, đánh giá chuyên gia, thầy đóng góp cho việc chỉnh sửa để giáo trình ngày hồn thiện Lâm Đồng, ngày 10 tháng 12 năm 2019 Tham gia biên soạn Phạm Đình Nam Ngơ Thiên Hồng Nguyễn Quỳnh Nguyên Phan Ngọc Bảo _Toc26562493 Trang CHƢƠNG 1: GIỚI THIỆU TỔNG QUAN VỀ NGƠN NGỮ LẬP TRÌNH JAVA Giới thiệu ngôn ngữ lập trình Java Các ứng dụng Java Dịch thực thi chƣơng trình viết Java Cơng cụ lập trình chƣơng trình dịch Bài tập CHƢƠNG NỀN TẢNG CỦA JAVA 10 2.1 Tập ký tự, từ khóa, định danh 10 2.2 Cấu trúc chƣơng trình Java 11 2.3 Chƣơng trình java 11 2.4 Biến, 12 2.5 Các kiểu liệu sở 14 2.6 Lệnh, khối lệnh java 15 2.7 Toán tử biểu thức 16 2.8 Cấu trúc điều khiển 18 2.9 Bài tập 24 CHƢƠNG 3: LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG TRONG JAVA 26 3.1.Mở đầu 26 3.2.Lớp (Class) 26 3.3.Đặc điểm hƣớng đối tƣợng java 30 3.4.Gói (packages) 34 3.5.Giao diện (interface) 35 3.6 Mảng, xâu ký tự 36 3.7 Bài tập 38 CHƢƠNG 4: THIẾT KẾ GIAO DIỆN NGƢỜI DÙNG 46 4.1.Mở đầu 46 4.2 Giới thiệu thƣ viện awt 46 Các khái niệm 46 4 Thiết kế GUI cho chƣơng trình 48 4.5.Xử lý biến cố/sự kiện 59 4.6 Bài tập 66 CHƢƠNG 5: LUỒNG VÀ TẬP TIN 75 5.1.Mở đầu 75 5.2.Luồng (Streams) 75 5.3.Sử dụng luồng Byte 78 5.4.File truy cập ngẫu nhiên (Random Access Files) 86 5.5.Sử dụng luồng ký tự 88 5.6.Lớp File 93 Tài liệu tham khảo 96 Trang Tên mơn học: LẬP TRÌNH JAVA I Vị trí, tính chất mơn học: Vị trí: đƣợc bố trí giảng sau mơn học: Lập trình Tính chất: Là mơn học tự chọn áp dụng cho trình độ Cao đẳng Cơng nghệ thông tin (ứng dụng phần mềm) II Mục tiêu môn học: Về kiến thức: Xác định rõ đặc điểm, môi trƣờng phát triển - hoạt động, khả ứng dụng ngơn ngữ Java; Trình bày đƣợc qui trình biên soạn, biên dịch thực thi ứng dụng Java; Trình bày đƣợc khái niệm, tính năng, cách sử dụng tảng Java nhƣ kiểu liệu, cấu trúc điều khiển, kỹ thuật hƣớng đối tƣợng, Java; Liệt kê đƣợc tính năng, đặc điểm thƣ viện đồ họa AWT nhƣ cách xử lý biến cố giao diện ứng dụng; Trình bày đƣợc khái niệm, cách xử lý với luồng vào liệu, tập tin; Trình bày đƣợc cách kết nối ứng dụng Java với sở liệu thao tác tƣơng tác liệu: cập nhật, truy vấn, Về kỹ năng: Viết thực thi đƣợc chƣơng trình ứng dụng Java xử lý số yêu cầu đơn giản; Thiết kế đƣợc ứng dụng với giao diện đồ họa đẹp, thân thiện với tính thơng dụng, kết nối đƣợc tƣơng tác đƣợc hệ sở liệu: thêm, xem, xóa, liệu; Về lực tự chủ trách nhiệm: Có khả tự nghiên cứu, tự học, tham khảo tài liệu liên quan đến môn học để vận dụng vào hoạt động hoc tập Vận dụng đƣợc kiến thức tự nghiên cứu, học tập kiến thức, kỹ đƣợc học để hoàn thiện kỹ liên quan đến môn học cách khoa học, quy định III Nội dung môn học: Trang Chƣơng 1: GIỚI THIỆU TỔNG QUAN VỀ NGƠN NGỮ LẬP TRÌNH JAVA Mã : Mục tiêu: - Trình bày khái niệm Java: chất, lịch sử phát triển; - Nêu đƣợc số ứng dụng bản, kiểu chƣơng trình Java; - Mô tả đƣợc môi trƣờng phát triển (JDK), công cụ soạn thảo Java; - Cài đặt đƣợc môi trƣờng phát triển, công cụ soạn thảo, máy ảo Java; - Thái độ nghiêm túc, cẩn thận Giới thiệu ngơn ngữ lập trình Java 1.1 Java gì? Java ngơn ngữ lập trình hƣớng đối tƣợng (tựa C++) Sun Microsystem đƣa vào thập niên 90 Chƣơng trình viết ngơn ngữ lập trình java chạy hệ thống có cài máy ảo java (Java Virtual Machine) 1.2 Lịch sử phát triển ngơn ngữ lập trình Java Ngơn ngữ lập trình Java James Gosling cơng Công ty Sun Microsystem phát triển Đầu thập niên 90, Sun Microsystem tập hợp nhà nghiên cứu thành lập nên nhóm đặt tên Green Team Nhóm Green Team có trách nhiệm xây dựng cơng nghệ cho ngành điện tử tiêu dùng Để giải vấn đề nhóm nghiên cứu phát triển xây dựng ngơn ngữ lập trình đặt tên Oak tƣơng tự nhƣ C++ nhƣng loại bỏ số tính nguy hiểm C++ có khả chạy nhiều phần cứng khác Cùng lúc world wide web bắt đầu phát triển Sun thấy đƣợc tiềm ngôn ngữ Oak nên đầu tƣ cải tiến phát triển Sau khơng lâu ngôn ngữ với tên gọi Java đời đƣợc giới thiệu năm 1995 Java tên gọi hịn đảo Indonexia, Đây nơi nhóm nghiên cứu phát triển chọn để đặt tên cho ngơn ngữ lập trình Java chuyến tham quan làm việc đảo Hòn đảo Java nơi tiếng với nhiều khu vƣờn trồng cafe, lý thƣờng thấy biểu tƣợng ly café nhiều sản phẩm phần mềm, cơng cụ lập trình Java Sun nhƣ số hãng phần mềm khác đƣa 1.3 Một số đặc điểm bậc Java Máy ảo Java (JVM - Java Virtual Machine) Tất chƣơng trình muốn thực thi đƣợc phải đƣợc biên dịch mã máy Mã máy kiến trúc CPU máy tính khác (tập lệnh mã máy CPU Intel, CPU Solarix, CPU Macintosh … khác nhau), trƣớc chƣơng trình sau đƣợc biên dịch xong chạy đƣợc kiến trúc CPU cụ thể Đối với CPU Intel chạy hệ điều hành nhƣ Microsoft Windows, Unix, Linux, OS/2, … Chƣơng trình thực thi đƣợc Windows đƣợc biên dịch dƣới dạng file có EXE cịn Linux đƣợc biên dịch dƣới dạng file có ELF, trƣớc chƣơng trình chạy đƣợc Windows muốn chạy đƣợc hệ điều hành khác nhƣ Linux chẳng hạn phải chỉnh sửa biên dịch lại Ngơn ngữ lập trình Java đời, nhờ vào máy ảo Java mà khó khăn nêu đƣợc khắc phục Một chƣơng trình viết ngơn ngữ lập trình Java đƣợc biên dịch mã máy ảo java (mã java bytecode) Sau máy ảo Java chịu trách nhiệm chuyển mã java bytecode thành mã máy tƣơng ứng Sun Microsystem chịu trách nhiệm phát triển máy ảo Java chạy hệ điều hành kiến trúc CPU khác Trang Thông dịch: Java ngơn ngữ lập trình vừa biên dịch vừa thơng dịch Chƣơng trình nguồn viết ngơn ngữ lập trình Java có *.java đƣợc biên dịch thành tập tin có *.class sau đƣợc trình thơng dịch thơng dịch thành mã máy Độc lập nền: Một chƣơng trình viết ngơn ngữ Java chạy nhiều máy tính có hệ điều hành khác (Windows, Unix, Linux, …) có cài đặt máy ảo java (Java Virtual Machine) Viết lần chạy nơi (write once run anywhere) Hƣớng đối tƣợng: Hƣớng đối tƣợng Java tƣơng tự nhƣ C++ nhƣng Java ngơn ngữ lập trình hƣớng đối tƣợng hoàn toàn Tất thứ đề cập đến Java liên quan đến đối tƣợng đƣợc định nghĩa trƣớc, chí hàm chƣơng trình viết Java (đó hàm main) phải đặt bên lớp Hƣớng đối tƣợng Java khơng có tính đa kế thừa (multi inheritance) nhƣ C++ mà thay vào Java đƣa khái niệm interface để hỗ trợ tính đa kế thừa Vấn đề đƣợc bàn chi tiết chƣơng Đa nhiệm - đa luồng (MultiTasking - Multithreading): Java hỗ trợ lập trình đa nhiệm, đa luồng cho phép nhiều tiến trình, tiểu trình chạy song song thời điểm tƣơng tác với Khả chuyển (portable): Chƣơng trình ứng dụng viết ngơn ngữ Java cần chạy đƣợc máy ảo Java chạy đƣợc máy tính, hệ điều hành có máy ảo Java “Viết lần, chạy nơi” (Write Once, Run Anywhere) Hỗ trợ mạnh cho việc phát triển ứng dụng: Công nghệ Java phát triển mạnh mẽ nhờ vào “đại gia Sun Microsystem” cung cấp nhiều cơng cụ, thƣ viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại hình ứng dụng khác cụ thể nhƣ: J2SE (Java Standard Edition) hỗ trợ phát triển ứng dụng đơn, ứng dụng client-server; J2EE (Java Enterprise Edition) hỗ trợ phát triển ứng dụng thƣơng mại, J2ME (Java Micro Edition) hỗ trợ phát triển ứng dụng thiết bị di động, không dây, … Các ứng dụng Java 2.1 Java ứng dụng Console Ứng dụng Console ứng dụng nhập xuất chế độ văn tƣơng tự nhƣ hình Console hệ điều hành MS-DOS Lọai chƣơng trình ứng dụng thích hợp với bƣớc đầu làm quen với ngôn ngữ lập trình java Các ứng dụng kiểu Console thƣờng đƣợc dùng để minh họa ví dụ liên quan đến cú pháp ngơn ngữ, thuật tốn, chƣơng trình ứng dụng khơng cần thiết đến giao diện ngƣời dùng đồ họa Hình 1.1 Ứng dụng Console Trang public class HelloWorld { public static void main(String args[]) { System.out.print("Hello World! Chao cac ban lop Cao Dang Lap Trinh May Tinh\n"); } } 2.2 Java ứng dụng Applet Java Applet loại ứng dụng nhúng chạy trang web trình duyệt web Từ internet đời, Java Applet cung cấp khả lập trình mạnh mẽ cho trang web Nhƣng gần chƣơng trình duyệt web phát triển với khả lập trình VB Script, Java Script, HTML, DHTML, XML,  với canh tranh khốc liệt Microsoft Sun làm cho Java Applet lu mờ Và gần nhƣ lập trình viên khơng cịn "mặn mà" với Java Applet (trình duyệt IE kèm phiên Windows 2000 khơng cịn hỗ trợ thực thi ứng dụng Java Applet) Hình bên dƣới minh họa chƣơng trình java applet thực thi trang web Hình 1.2 Ứng dụng Applet 2.3 Java phát triển ứng dụng Desktop dùng AWT JFC Việc phát triển chƣơng trình ứng dụng có giao diện ngƣời dùng đồ họa trực quan giống nhƣ chƣơng trình đƣợc viết dùng ngơn ngữ lập trình VC++ hay Visual Basic đƣợc java giải thƣ viện AWT JFC JFC thƣ viện phong phú hỗ trợ mạnh mẽ nhiều so với AWT JFC giúp cho ngƣời lập trình tạo giao diện trực quan ứng dụng Liên quan đến việc phát triển ứng dụng có giao diện ngƣời dùng đồ họa trực quan tìm hiểu chi tiết chƣơng 2.4 Java phát triển ứng dụng Web Java hỗ trợ mạnh mẽ việc phát triển ứng dụng Web thông qua công nghệ J2EE (Java Enterprise Edition) Cơng nghệ J2EE hồn tồn tạo ứng dụng Web cách hiệu không thua công nghệ NET mà Microsft quảng cáo Hiện có nhiều trang Web tiếng Việt Nam nhƣ khắp nơi giới đƣợc xây dựng phát triển dựa công nghệ Java Số ứng dụng Web đƣợc xây dựng dùng cơng nghệ Java chắn khơng biết đƣợc số Trang xác bao nhiêu, nhƣng chúng tơi đƣa vài ví dụ để thấy công nghệ Java Sun "đối thủ đáng gờm" Microsoft http://java.sun.com/ http://e-docs.bea.com/ http://www.macromedia.com/software/jrun/ http://tomcat.apache.org/index.html Chắc khơng ngƣời biết đến trang web thơng tin nhà đất tiếng TPHCM là: http://www.nhadat.com/ Ứng dụng Web đƣợc xây dựng dựa cơng nghệ java Bạn tìm hiểu chi tiết công nghệ J2EE tạo địa chỉ: http://java.sun.com/j2ee/ 2.5 Java phát triển ứng dụng nhúng Java Sun đƣa công nghệ J2ME (The Java Platform, MicroEdition J2ME) hỗ trợ phát triển chƣơng trình, phần mềm nhúng J2ME cung cấp mơi trƣờng cho chƣơng trình ứng dụng chạy đƣợc thiết bị cá nhân nhƣ: điện thọai di động, máy tính bỏ túi PDA hay Palm, nhƣ thiết bị nhúng khác Bạn tìm hiểu chi tiết công nghệ J2ME địa chỉ: http://java.sun.com/j2me/ Dịch thực thi chƣơng trình viết Java Việc xây dựng, dịch thực thi chƣơng trình viết ngơn ngữ lập trình java tóm tắt qua bƣớc sau: - Viết mã nguồn: dùng chƣơng trình soạn thảo (NotePad hay Jcreator chẳng hạn) để viết mã nguồn lƣu lại với tên có ".java" - Biên dịch mã máy ảo: dùng trình biên dịch javac để biên dịch mã nguồn ".java" thành mã máy ảo (java bytecode) có ".class" lƣu lên đĩa - Thơng dịch thực thi: ứng dụng đƣợc load vào nhớ, thơng dịch thực thi dùng trình thơng dịch Java thông qua lệnh "java"  Đƣa mã java bytecode vào nhớ: bƣớc "loading" Chƣơng trình phải đƣợc đặt vào nhớ trƣớc thực thi "Loader" lấy files chứa mã java bytecode có đuôi ".class" nạp chúng vào nhớ  Kiểm tra mã java bytecode: trƣớc trình thơng dịch chuyển mã bytecode thành mã máy tƣơng ứng để thực thi mã bytecode phải đƣợc kiểm tra tính hợp lệ  Thông dịch & thực thi: cuối dƣới điều khiển CPU trình thơng dịch thời điểm có mã bytecode đƣợc chuyển sang mã máy thực thi Công cụ lập trình chƣơng trình dịch 4.1 JDK7 Download JDK phiên tƣơng ứng với hệ điều hành sử dụng từ địa java.sun.com cài đặt lên máy tính (phiên đƣợc chúng tơi sử dụng viết giáo trình JDK 1.7.0) Sau cài xong, cần cập nhật đƣờng dẫn PATH hệ thống đến thƣ mục chứa chƣơng trình dịch ngôn ngữ java Trang } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("Usage: ShowFile File"); return; } // read bytes until EOF is encountered { i = fin.read(); if(i != -1) System.out.print((char) i); } while(i != -1); fin.close(); } } Kết thực thi chƣơng trình: Hình 5.3 Đọc ghi file dùng luồng Byte 5.3.3.2 Ghi liệu xuống file Mở file để ghi liệu FileOutputStream(String fileName) throws FileNotFoundException Nếu file khơng tạo đƣợc: ném FileNotFoundException Ghi liệu xuống: dùng phƣơng thức write()void write(int byteval) throws IOException: ghi byte xác định tham sốbyteval xuống file, ném IOException có lỗi ghi Đóng file: dùng phƣơng thức close() void close( ) throws IOException:sau làm việc xong cần đóng file để giải phóng tài nguyên hệ thống cấp phát cho file Ví dụ: copy nội dung file text đến file text khác /* Copy nội dung file text*/ import java.io.*; class CopyFile { public static void main(String args[])throws IOException { int i; FileInputStream fin; FileOutputStream fout; try { // open input file try { fin = new FileInputStream(“D:\\source.txt”); Trang 82 } catch(FileNotFoundException exc) { System.out.println("Input File Not Found"); return; } // open output file try { fout = new FileOutputStream(“D:\\dest.txt”); } catch(FileNotFoundException exc) { System.out.println("Error Opening Output File"); return; } } catch(ArrayIndexOutOfBoundsException exc) { System.out.println("Usage: CopyFile From To"); return; } // Copy File { { try i = fin.read(); if(i != -1) fout.write(i); } while(i != -1); } catch(IOException exc) { System.out.println("File Error"); } fin.close(); fout.close(); } } Kết thực thi chƣơng trình: chƣơng trình copy nội dung file D:\source.txt ghi vào file D:\dest.txt 5.3.4.Đọc ghi liệu nhị phân Phần đọc ghi bytes liệu ký tự mã ASCII Đểđọc ghi giá trị nhị phân kiểu liệu java, sử dụng DataInputStream DataOutputStream DataOutputStream: thực interface DataOuput Interface DataOutput có phƣơng thức cho phép ghi tất kiểu liệu sở java đến luồng (theo định dạng nhị phân) Phƣơng thức Ý nghĩa Trang 83 void Ghi xuống luồng giá writeBoolean trị boolean đƣợc xác định (boolean val) val void writeByte Ghi xuống luồng byte (int val) đƣợc xác định val void writeChar Ghi xuống luồng (int val) Char đƣợc xác định val void Ghi xuống luồng giá writeDouble (double trị val) Double đƣợc xác định val void writeFloat Ghi xuống luồng giá (float val) trị float đƣợc xác định val void writeInt Ghi xuống luồng giá (int val) trị int đƣợc xác định val void writeLong (long val) void writeShort (int val) Ghi xuống luồng giá trị long đƣợc xác định val Ghi xuống luồng giá trị short đƣợc xác định val Contructor: DataOutputStream(OutputStream outputStream) OutputStream: luồng xuất liệu Để ghi liệu file đối tƣợng outputStream FileOutputStream DataInputStream: thực interface DataInput Interface DataInput có phƣơng thức cho phép đọc tất kiểu liệu sở java (theo định dạng nhị phân) Phƣơng thức Ý nghĩa boolean Đọc giá trị boolean readBoolean( ) Byte Đọc byte readByte( ) char Đọc Char readChar( ) double Đọc giá trị Double readDouble( ) float Đọc giá trị float readFloat( ) int readInt( ) Đọc giá trị int Long Đọc giá trị long readLong( ) short Đọc giá trị short readShort( ) Contructor: DataInputStream(InputStream inputStream) InputStream: luồng nhập liệu Đểđọ liệu từ file đối tƣợng InputStream FileInputStream Trang 84 Ví dụ: dùng DataOutputStream DataInputStream để ghi đọc kiểu liệu khác file.import java.io.*; class RWData { public static void main(String args[]) throws IOException { DataOutputStream dataOut; DataInputStream dataIn; int i = 10; double d = 1023.56; boolean b = true; try { dataOut = new DataOutputStream( new FileOutputStream("D:\\testdata")); } catch(IOException exc) { System.out.println("Cannot open file."); return; } try { System.out.println("Writing " + i); dataOut.writeInt(i); System.out.println("Writing " + d); dataOut.writeDouble(d); System.out.println("Writing " + b); dataOut.writeBoolean(b); System.out.println("Writing " + 12.2 * 7.4); dataOut.writeDouble(12.2 * 7.4); } catch(IOException exc) { System.out.println("Write error."); } dataOut.close(); System.out.println(); // Now, read them back try { dataIn = new DataInputStream( new FileInputStream("D:\\testdata")); } catch(IOException exc) { System.out.println("Cannot open file."); return; } try Trang 85 { i = dataIn.readInt(); System.out.println("Reading " + i); d = dataIn.readDouble(); System.out.println("Reading " + d); b = dataIn.readBoolean(); System.out.println("Reading " + b); d = dataIn.readDouble(); System.out.println("Reading " + d); } catch(IOException exc) { System.out.println("Read error."); } dataIn.close(); } } Kết thực thi chƣơng trình: Dữ liệu ghi xuống file D:\\testdata Hình 5.4 Dữ liệu ghi xuống file D:\\testdata Kết đọc xuất Console: Hình 5.5 Kết đọc xuất Console 5.4.File truy cập ngẫu nhiên (Random Access Files) Bên cạnh việc xử lý xuất nhập file theo kiểu thông qua luồng, java hỗ trợ truy cập ngẫu nhiên nội dung file dùng RandomAccessFile RandomAccessFile không dẫn xuất từ InputStream hay OutputStream mà thực interface DataInput, DataOutput (có định nghĩa phƣơng thức I/O bản) RandomAccessFile hỗ trợ vấn đềđịnh vị trỏ file bên file dùng phƣơng thức seek(long newPos) Ví dụ: minh họa việc truy cập ngẫu nhiên file Chƣơng trình ghi số kiểu double xuống file, đọc lên theo thứ tự ngẫu nhiên import java.io.*; class RandomAccessDemo { public static void main(String args[]) throws IOException Trang 86 { double data[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25}; double d; RandomAccessFile raf; try { raf = new RandomAccessFile("D:\\random.dat", "rw"); } catch(FileNotFoundException exc) { System.out.println("Cannot open file."); return ; } // Write values to the file for(int i=0; i < data.length; i++) { try { raf.writeDouble(data[i]); } catch(IOException exc) { System.out.println("Error writing to file."); return ; } } try { // Now, read back specific values d = raf.readDouble(); System.out.println("First value is " + d); raf.seek(8); // seek to second double d = raf.readDouble(); System.out.println("Second value is " + d); raf.seek(8 * 3); // seek to fourth double d = raf.readDouble(); System.out.println("Fourth value is " + d); System.out.println(); raf.seek(0); // seek to first double // Now, read every other value System.out.println("Here is every other value: "); for(int i=0; i < data.length; i+=2) { raf.seek(8 * i); // seek to ith double d = raf.readDouble(); System.out.print(d + " "); } Trang 87 System.out.println("\n"); } catch(IOException exc) { System.out.println("Error seeking or reading."); } raf.close(); } } Kết thực thi chƣơng trình: HÌnh 5.6 ghi số kiểu double xuống file, đọc lên theo thứ tự ngẫu nhiên 5.5.Sử dụng luồng ký tự Chúng ta tìm hiểu sử dụng luồng byte để xuất/nhập liệu Tuy nhƣng số trƣờng hợp luồng byte cách “lý tƣởng” để quản lý xuất nhập liệu kiểu character, java đƣa kiểu luồng character phục vụ cho việc xuất nhập liệu kiểu character luồng Mức hai lớp trừu tƣợng Reader Writer Lớp Reader dùng cho việc nhập liệu luồng, lớp Writer dùng cho việc xuất liệu luồng Những lớp dẫn xuất từReader Writer thao tác luồng ký tự Unicode Những phƣơng thức định nghĩa lớp trừu tƣợng Reader Writer Phƣơng thức Ý nghĩa Reader abstract void Đóng luồng close( ) void mark(int Đánh dấu vị trí numChars) luồng boolean Kiểm tra xem luồng có markSupported( ) hỗ trợ thao tác đánh dấu mark() không? int read( ) Đọc ký tự int buffer[ ]) read(char Đọc buffer.length ký tự cho vào buffer Trang 88 abstract int Đọc numChars ký tự read(char cho vào vùng đệm buffer vị buffer[ ], int trí buffer[offset] offset, int numChars) boolean ready( ) Kiểm tra xem luồng có đọc đƣợc khơng? void reset( ) Dời trỏ nhập đến vị trí đánh dấu trƣớc long skip(long Bỏ qua numChars numChars) luồng nhập Writer abstract void Đóng luồng xuất Có lỗi close( ) ném IOException abstract void Dọn dẹp luồng (buffer flush( ) xuất) void write(int ch) Ghi ký tự void write(byte Ghi mảng ký tự buffer[ ]) abstract void Ghi phần mảng write(char ký tự buffer[ ], int offset, int numChars) void write(String Ghi chuỗi str) void write(String Ghi phần str, int chuỗi ký tự offset, int numChars) 5.5.1.Nhập Console dùng luồng ký tự Thƣờng việc nhập liệu từ Console dùng luồng ký tự thuận lợi dùng luồng byte Lớp tốt đểđọc liệu nhập từ Console lớp BufferedReader Tuy nhiên xây dựng lớp BufferedReader trực tiếp từSystem.in Thay vào phải chuyển thành luồng ký tự Để làm điều dùng InputStreamReader chuyển bytes thành ký tự Để có đƣợc đối tƣợng InputStreamReader gắn với System.in ta dùng constructor InputStreamReader InputStreamReader(InputStream inputStream) Tiếp theo dùng đối tƣợng InputStreamReaderđã tạo để tạo BufferedReader dùng constructor BufferedReader BufferedReader(Reader inputReader) Ví dụ: Tạo BufferedReader gắn với Keyboard BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Sau thực câu lệnh trên, br luồng ký tự gắn với Console thơng qua System.in Trang 89 Ví dụ: Dùng BufferedReader đọc ký tự từ Console Việc đọc kết thúc gặp dấu chấm (dấu chấm để kết thúc chƣơng trình) import java.io.*; class ReadChars { public static void main(String args[]) throws IOException { char c; BufferedReader br = newBufferedReader( new InputStreamReader(System.in)); System.out.println("Nhap chuoi ky tu, gioi han dau cham."); // read characters { c = (char) br.read(); System.out.println(c); } while(c != '.'); } } Kết thực thi chƣơng trình: Hình 5.7 Nhập Console dùng luồng ký tự Ví dụ: Dùng BufferedReader đọc chuỗi ký tự từ Console Chƣơng trình kết thúc gặp chuỗi đọc chuỗi “stop” import java.io.*; class ReadLines { public static void main(String args[]) throws IOException { // create a BufferedReader using System.in BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; System.out.println("Nhap chuoi."); System.out.println("Nhap 'stop' ket thuc chuong trinh."); { str = br.readLine(); System.out.println(str); } while(!str.equals("stop")); } } Trang 90 Kết thực thi chƣơng trình: Hình 5.8 Dùng BufferedReader đọc chuỗi ký tự từ Console 5.5.2.Xuất Console dùng luồng ký tự Trong ngôn ngữ java, bên cạnh việc dùng System.outđể xuất liệu Console (thƣờng dùng để debug chƣơng trình), dùng luồng PrintWriterđối với chƣơng trình “chuyên nghiệp” PrintWriter lớp luồng ký tự Việc dùng lớp luồng ký tựđể xuất liệu Console thƣờng đƣợc “ƣa chuộng” Để xuất liệu Console dùng PrintWriter cần thiết phải chỉđịnh System.out cho luồng xuất Ví dụ: Tạo đối tƣợng PrintWriter để xuất liệu Console PrintWriter pw = new PrintWriter(System.out, true); Ví dụ: minh họa dùng PrintWriterđể xuất liệu Console import java.io.*; public class PrintWriterDemo { public static void main(String args[]) { PrintWriter pw = new PrintWriter(System.out, true); int i = 10; double d = 123.67; double r = i+d pw.println("Using a PrintWriter."); pw.println(i); pw.println(d); pw.println(i + " + " + d + " = " + r); } } Kết thực thi chƣơng trình: Hình 5.9 Xuất Console dùng luồng ký tự 5.5.3.Đọc/ghi File dùng luồng ký tự Thông thƣờng đểđọc/ghi file ngƣời ta thƣờng dùng luồng byte, nhƣng luồng ký tự thực đƣợc Ƣu điểm việc dùng luồng ký tự chúng thao tác trực tiếp ký tự Unicode Vì luồng ký tự chọn lựa tốt cần lƣu văn Unicode Hai lớp luồng thƣờng dùng cho việc đọc/ghi liệu ký tự xuống file FileReader FileWriter Ví dụ: Đọc dịng văn nhập từ bàn phím ghi chúng xuống file tên “test.txt” Việc đọc ghi kết thúc ngƣời dùng nhập vào chuỗi “stop” Trang 91 import java.io.*; class KtoD { public static void main(String args[]) throws IOException { String str; FileWriter fw; BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); try { fw = new FileWriter("D:\\test.txt"); } catch(IOException exc) { System.out.println("Khong the mo file."); return ; } System.out.println("Nhap ('stop' de ket thuc chuong trinh)."); { System.out.print(": "); str br.readLine(); if(str.compareTo("stop") == 0) break; str = str + "\r\n"; fw.write(str); } while(str.compareTo("stop") != 0); = fw.close(); } } Kết thực thi chƣơng trình Dữ liệu nhập từ Console: Hình 5.11 Đọc File dùng luồng ký tự Dữ liệu ghi xuống file: Hình 5.12 Ghi File dùng luồng ký tự Ví dụ: đọc hiển thị nội dung file “test.txt” lên hình Trang 92 import java.io.*; class DtoS { public static void main(String args[]) throws Exception { FileReader fr = new FileReader("D:\\test.txt"); BufferedReader br = new BufferedReader(fr); String s; while((s = br.readLine()) != null) { System.out.println(s); } fr.close(); } } Kết thực thi chƣơng trình Nội dung file test.txt: Hình 5.13 đọc hiển thị nội dung file “test.txt” lên hình Kết đọc file hiển thị Console: Hình 5.14 đọc file hiển thị Console 5.6.Lớp File Lớp File không phục vụ cho việc nhập/xuất liệu luồng Lớp File thƣờng đƣợc dùng để biết đƣợc thông tin chi tiết tập tin nhƣ thƣ mục (tên, ngày tạo, kích thƣớc, …) java.lang.Object + java.io.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 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ừ đố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”); Một số phƣơng thức thƣờng gặp lớp File (chi tiết phƣơng thức đọc thêm tài liệu J2SE API Specification) Trang 93 Lấy tên đối tƣợng File Lấy đƣờng dẫn tập tin public StringgetName() public StringgetPath() public isDirectory() boolean public isFile() … public list() boolean String[] Kiểm tra xem tập tin có phải thƣ mục khơng? Kiểm tra xem tập tn có phải file khơng? Lấy danh sách tên tập tin thƣ mục đối tƣợng File xét trả mảng Ví dụ: import java.awt.*; import java.io.*; public class FileDemo { public static void main(String args[]) { Frame fr = new Frame ("File Demo"); fr.setBounds(10, 10, 300, 200); fr.setLayout(new BorderLayout()); Panel p = new Panel(new GridLayout(1,2)); List list_C = new List(); list_C.add("C:\\"); File driver_C = new File ("C:\\"); String[] dirs_C = driver_C.list(); for (int i=0;i

Ngày đăng: 25/04/2021, 08:57

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

Tài liệu liên quan