Lập trình hướng đối tượng - Chương 4: Vào ra dữ liệu trong Java
Bạn đang xem 20 trang mẫu của tài liệu "Lập trình hướng đối tượng - Chương 4: Vào ra dữ liệu trong Java", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- lap_trinh_huong_doi_tuong_chuong_4_vao_ra_du_lieu_trong_java.pptx
Nội dung text: Lập trình hướng đối tượng - Chương 4: Vào ra dữ liệu trong Java
- Chương 4 Vào ra dữ liệu trong Java TRẦN MINH THÁI Email: minhthai@huflit.edu.vn Website: www.minhthai.edu.vn Cập nhật: 18 tháng 07 năm 2016
- Nội dung #2 1. Tổng quan về vào ra dữ liệu trong Java 2. Các lớp vào ra theo luồng ký tự 3. Các lớp vào ra theo luồng byte 4. Lớp File 5. Vào ra đối tượng và áp dụng
- Tổng quan về vào ra dữ liệu #3
- Các lớp vào ra theo luồng ký tự #4
- Các lớp vào ra theo luồng byte #5
- Vào ra dữ liệu trên thiết bị chuẩn #6 • Vào dữ liệu từ thiết bị chuẩn (bàn phím): System.in • Một đối tượng của lớp InputStream → đọc ghi theo luồng byte • Các phương thức rất hạn chế • Thường được sử dụng để khởi tạo các đối tượng luồng khác để xử lý dễ dàng hơn: • new BufferedReader(new InputStreamReader(System.in)) • new Scanner(System.in) • Ra dữ liệu trên thiết bị chuẩn (màn hình): System.out • Một đối tượng của lớp PrintStream • Cung cấp các phương thức đầy đủ
- Vào ra dữ liệu trên file #7 • Bước 1. Tạo đối tượng file để đọc/ ghi • Bước 2. Thao tác xử lý trên file • Bước 3. Đóng file
- Vào ra dữ liệu trên file #8 Có hai dạng file • File nhị phân: Dữ liệu được tổ chức theo dạng bit-by- bit • File văn bản:
- Vào ra dữ liệu trên file nhị phân #9 Ghi file • FileOutputStream(filePath): ghi dữ liệu theo luồng • Phương thức write(int) • DataOutputStream(outputStreamObject): ghi dữ liệu cơ bản • Phương thức writeInt(), writeDouble(), writeChars(), !!! Ghi tiếp vào file có sẵn: bổ sung thêm tham số thứ 2 là true (mặc định không truyền là false: ghi đè)
- Vào ra dữ liệu trên file nhị phân #10 Đọc file • FileInputStream(filePath): đọc dữ liệu theo luồng • Phương thức int read() trả về -1 nếu đọc hết file • DataInputStream(inputStreamObject): đọc dữ liệu cơ bản • Phương thức readInt(), readDouble(), Đóng file: close()
- Ví dụ #11
- Ví dụ (tt) #12
- Ví dụ (tt) #13
- Ví dụ (tt) #14
- Vào ra sử dụng bộ đệm #15 Ghi dữ liệu sử dụng bộ đệm: BufferedOutputStream • Khởi tạo: BufferedOutputStream(outputStreamObject) • Phương thức flush(): xóa bộ đệm • Phương thức write(int): ghi dữ liệu Đọc dữ liệu sử dụng bộ đệm: BufferedInputStream • Khởi tạo: BufferedInputStream(inputStreamObject) • Phương thức available(): trả về 0 nếu đọc hết dữ liệu • Phương thức read(int): trả về -1 nếu đọc hết dữ liệu
- Ví dụ public void copyFile(){ { #16try InputStream input = new FileInputStream(srcFile); BufferedInputStream bInput = new BufferedInputStream(input); OutputStream output = new FileOutputStream(desFile); BufferedOutputStream bOutput = new BufferedOutputStream(output); int data; while(bInput.available()>0){ data = bInput.read(); bOutput.flush(); bOutput.write(data); } } catch(IOException e){ System.out.println(e); } }
- Vào ra dữ liệu file văn bản #17 FileReader • Khởi tạo: FileReader(filePath) • Phương thức read(): đọc từng ký tự • Trả về -1 nếu hết file FileWriter • Khởi tạo: FileWriter(filePath) • Phương thức write(): ghi dữ liệu vào file
- public static void main(String []args){ try { #18 //Ghi file FileWriter out = new FileWriter("test.txt"); out.write("Nguyen Van An"); out.write(String.valueOf(10.5)); out.write(String.valueOf('c')); out.close(); //Doc file FileReader in = new FileReader("test.txt"); int data; while((data=in.read())!=-1){ System.out.println((char)data); } in.close(); } catch(IOException e){ System.out.println(e); } }
- Đọc ghi từng dòng file văn bản #19 Ghi từng dòng văn bản: Sử dụng PrintWriter • Khởi tạo: new PrintWriter(writerObject) • Phương thức: print(), printf(), println() Ghi từng dòng văn bản: Sử dụng BufferedWriter • Khởi tạo: new BufferedWriter(writerObject) • Phương thức: void write(int),void write(String), void writeLine() Đọc từng dòng văn bản: Sử dụng BufferedReader • Khởi tạo: new BufferedReader(readerObject) • Phương thức: String readLine() trả về null nếu đọc hết file
- public class FileTextDungPrintWriter { public static void main(String []args){ String []hoTen = {"Nguyen Van An", #20 "Lam Thanh Ngoc", "Phan Nhu Thong"}; double []dtb = {7.5, 8.0, 6.9}; try{ FileWriter out = new FileWriter("textfile.txt"); PrintWriter printWriter = new PrintWriter(out); for(int i=0; i<3; i++){ printWriter.println(hoTen[i]+":"+dtb[i]); } out.close(); } catch(IOException e){ System.out.println(e); } Nguyen Van An:7.5 } Lam Thanh Ngoc:8.0 } Phan Nhu Thong:6.9
- Tách xâu ký tự theo dấu hiệu phân cách (delimiter) #21 • java.util.StringTokenizer • Delimiter: mặc định là dấu cách trắng \s • Định nghĩa lại trong phương thức khởi tạo StringTokenizer(String input, String delimiter) • nextToken(): trả lại xâu phần tử tiếp theo • hasMoreTokens(): trả về false nếu không còn xâu phần tử • countTokens(): trả về số xâu phần tử tách được
- public class FileTextDungBufferedReader { public static void main(String []args){ try{ FileReader in = #22 new FileReader("textfile.txt"); BufferedReader bIn = new BufferedReader(in); String line; StringTokenizer data; while((line=bIn.readLine())!=null){ data=new StringTokenizer(line, ":"); while(data.hasMoreTokens()){ System.out.print(data.nextToken() + " "); } System.out.println(); } } catch(IOException e){ System.out.println(e); } Nguyen Van An 7.5 } Lam Thanh Ngoc 8.0 } Phan Nhu Thong 6.9
- Bài tập #23 Thống kê số lần xuất hiện của ký tự chữ cái trong file text - Đầu vào: file text “input.txt” chứa nội dung văn bản được lưu trong thư mục Project hiện hành - Đầu ra: file “thongke.txt” chứa n dòng (tương ứng với n chữ cái được sắp xếp theo thứ tự từ điển). Mỗi dòng gồm 2 thông tin: ký tự và số lần xuất hiện trong file “input.txt”
- Lớp File #24 • Cung cấp các phương thức thao tác với file, thư mục trên máy tính • Các phương thức khởi tạo: • File(String filePath): Tạo đối tượng file với đường dẫn (và tên file) • File(String path, String filePath): Tạo đối tượng file nằm trong thư mục cha path !!! Chỉ tạo đối tượng (chưa tạo file hay thư mục)
- Lớp File – Các phương thức #25 • boolean mkdir(): tạo thư mục có tên chỉ ra khi khởi tạo đối tượng File • boolean mkdirs(): tạo thư mục có tên chỉ ra khi khởi tạo đối tượng File, bao gồm cả thư mục cha nếu cần thiết • createNewFile(): tạo file mới • boolean isDirectory(): trả về true nếu là thư mục • boolean isFile(): trả về true nếu là file
- Lớp File – Các phương thức #26 • boolean canRead(): trả về true nếu có quyền đọc • boolean canWrite(): trả về true nếu có quyền ghi • boolean canExecute(): trả về true nếu có quyền thực thi • String getName() • String getParent()
- Lớp File – Các phương thức #27 • String[] list(): trả về tên các thư mục con và file • String[] list(FileNameFilter filter): trả về tên các thư mục con và file có chứa filter • File[] listFiles() • File[] listFiles(FileFilter filter): trả về các đối tượng file thỏa mãn filter
- Lớp File – Các phương thức #28 • boolean exists(): trả về true nếu tồn tại file, thư mục • long length(): trả về kích thước của file (byte) • boolean delete() • void deleteOnExit(): xóa khi tắt máy ảo JVM • boolean renameTo(File dest): đổi tên • boolean setReadOnly(): thiết lập thuộc tính read-only
- Ví dụ liệt kê các file có phần mở rộng tương ứng trong thư mục #29 public class TimFile implements FilenameFilter { String str; public TimFile(String ext){ str = "." + ext; } public boolean accept(File dir, String name) { return name.endsWith(str); } }
- Ví dụ liệt kê các file có phần mở rộng tương ứng trong thư mục #30 public class TimFile implements FilenameFilter { public static void main(String []args) { Scanner input = new Scanner(System.in); String path, ext; System.out.print("Nhap vao ten thu muc: "); path = input.nextLine(); File file = new File(path); if(file.isDirectory()){ System.out.print("Phan mo rong: "); ext = input.nextLine(); String[] children; FilenameFilter filter = new TimFile(ext); children = file.list(filter); for(String child:children) System.out.println(child); } } }
- Bài tập #31 Tìm file trong thư mục • Đầu vào: tên thư mục và file cần tìm • Đầu ra: đường dẫn của file tìm được (nếu có)
- Lớp Files #32 • Các phương thức đều là static • Đối số là đối tượng từ lớp Path để định vị file trên hệ thống • Tạo đối tượng Path từ đường dẫn file Paths.get(String filePath)
- Lớp Files – Các phương thức #33 • boolean isDirectory(Path): trả về true nếu là thư mục • boolean isRegularFile(Path): trả về true nếu là file • boolean isReadable(Path): trả về true nếu được phép đọc • boolean isWritable(Path) • boolean isExecutable(Path)
- Lớp Files – Các phương thức #34 • Path createFile(Path, FileAttribute): tạo file • Path createDirectory(Path, FileAttribute): tạo thư mục • Path createDirectories(Path, FileAttribute): thạo thư mục, bao gồm cả thư mục cha nếu không tồn tại
- Lớp Files – Các phương thức #35 • void deleteIfExist(Path): xóa • boolean notExist(Path): trả về true nếu file không tồn tại • long size(Path): trả về kích thước file (byte) • Path copy(Path source, Path target, CopyOption options) • Path move(Path source, Path target, CopyOption options)
- Lớp Files – Các phương thức đọc #36 • byte[] readAllBytes(Path): đọc nội dung file vào mảng byte • BufferedReader newBufferedReader(Path): mở file và trả lại đối tượng BufferedReader • BufferedReader newBufferedReader(Path, Charset): mở file và trả lại đối tượng BufferedReader, hỗ trợ bảng mã khác (US-ASCII, UTF-16), mặc định(UTF-8) • InputStream newInputStream(Path, OpenOption): mở file và trả lại đối tượng InputStream
- Lớp Files – Các phương thức ghi #37 • Path write(Path, byte[], OpenOption): ghi mảng byte vào file BufferedWriter newBufferedWriter(Path, OpenOption): mở và tạo một đối tượng BufferedWriter để ghi • BufferedWriter newBufferedWriter(Path, Charset, OpenOption) • OutputStream newOutputStream(Path, OpenOption): mở và tạo một đối tượng OutputStream để ghi
- Lớp Files – Các OpenOption #38 • APPEND: ghi tiếp • CREATE: tạo file mới và ghi • READ: mở để đọc • WRITE: mở để ghi • DELETE_ON_CLOSE: xóa khi đóng file • DSYNC và SYNC: yêu cầu đồng bộ hóa khi có nhiều luồng cùng truy cập vào file
- Lớp Files – Các CopyOption #39 • COPY_ATTRIBUTES: Sao chép cả thuộc tính • REPLACE_EXISTING: chép đè lên file cũ (nếu có)
- Q&A #40