1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình java cơ bản

51 4 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 152,49 KB

Nội dung

Lập trình Java Cao Đức Thơng - Trần Minh Tuấn cdthong@ifi.edu.vn, tmtuan@ifi.edu.vn Bài Luồng xử lý file • • • • • • • Khái niệm luồng Các luồng byte Đối tượng serializable Các luồng ký tự File truy cập ngẫu nhiên Lớp File Bài tập Khái niệm luồng (stream) • Luồng “dòng chảy” liệu gắn với thiết bị vào • Hai loại luồng: • Luồng nhập: Gắn với thiết bị nhập bàn phím, máy scan, file • Luồng xuất: Gắn với thiết bị xuất hình, máy in, file • Việc xử lý vào thông qua luồng giúp cho lập trình viên khơng phải quan tâm đến chất thiết bị vào Khái niệm luồng (stream) • Chương trình đọc luồng nhập để lấy liệu từ thiết bị nhập, ghi vào luồng xuất để đưa liệu thiết bị xuất Input Stream Input Device Program Output Device Output Stream Các luồng • Luồng byte: Là dịng chảy byte • InputStream: Luồng nhập byte • OutputStream: Luồng xuất byte • Luồng ký tự: Là dịng chảy ký tự (char) • Reader: Luồng nhập ký tự • Writer: Luồng xuất ký tự • Các lớp luồng nằm gói java.io Luồng byte ByteArrayInputStream DataInputStream FileInputStream InputStream FilterInputStream BufferedInputStream ObjectInputStream LineNumberInputStream PipedInputStream PushbackInputStream SequenceInputStream StringBufferInputStream Luồng byte ByteArrayOutputStream DataOutputStream FileOutputStream OutputStream FilterOutputStream BufferedOutputStream ObjectOutputStream PrintStream PipedOutputStream Luồng nhập/xuất byte • InputStream OutputStream hai lớp gốc luồng nhập/xuất byte (abstract) Object InputStream OutputStream Lớp InputStream • Một số phương thức InputStream • abstract int read() throws IOException • Đọc byte từ luồng • Nếu cuối luồng trả -1 • int read(byte[] b) throws IOException • Đọc dãy byte từ luồng • void close() throws IOException • Đóng luồng nhập • int available() throws IOException • Trả số byte đọc tiếp • long skip(long n) throws IOException • Bỏ qua n byte Lớp OutputStream • Một số phương thức OutputStream • abstract void write(int b) throws IOException • Ghi byte luồng • void write(byte[] b) throws IOException • Ghi dãy byte luồng • void close() throws IOException • Đóng luồng • void flush() throws IOException • Dồn xuất luồng 10 Ví dụ: Đọc file Unicode try { InputStreamReader buff = new InputStreamReader(new FileInputStream("unicode.txt"), "UTF-16"); int ch; while ( (ch = buff.read()) != -1) { System.out.print((char)ch); // chế độ console không hiển thị ký tự có // dấu, nên hiển thị TextField TextArea } buff.close(); } catch (IOException e) { System.out.println(“Error IO file”); } 37 Chú ý soạn thảo mã • Muốn đưa trực tiếp tiếng Việt Unicode vào đoạn mã Java cần phải sử dụng Notepad phần mềm hỗ trợ soạn thảo tiếng Việt • Các bước cần thực • Lưu file source code dạng Unicode • Gõ lệnh biên dịch javac –encoding unicode filename.java • Lệnh thơng dịch java filename (như bình thường) 38 File truy nhập ngẫu nhiên • Hai hạn chế việc xử lý file thông qua luồng • Khơng thể đọc ghi file lúc • Truy nhập file mang tính • Java hỗ trợ việc truy nhập xử lý file cách tự thông qua lớp RandomAccessFile 39 File truy nhập ngẫu nhiên • Các phương thức • RandomAccessFile(String name, String mode) // cấu tử, mode “r”, “w”, “rw” • int readInt(); // đọc số nguyên • void writeInt(int v); // ghi số nguyên • long readLong(); // đọc số long • void writeLong(long v); // ghi số long • void seek(long pos); // di chuyển vị trí trỏ file • long getFilePointer(); // lấy vị trí trỏ file • long length(); // lấy kích cỡ file • void close(); // đóng file • 40 Ví dụ với RandomAccessFile try { RandomAccessFile f = new RandomAccessFile("randfile.dat","rw"); f.writeBoolean(true); f.writeInt(123456); f.writeChar('j'); f.writeDouble(1234.56); f.seek(1); System.out.println(f.readInt()); System.out.println(f.readChar()); System.out.println(f.readDouble()); Kết f.seek(0); System.out.println(f.readBoolean()); 123456 f.close(); j } catch (IOException e) { 1234.56 System.out.println(“Error IO file”); true } 41 Chú ý đóng file • Nếu để lệnh f.close() khối try lệnh khơng thực có lỗi lệnh phía • Có thể viết lại sau: 42 Chú ý đóng file • • • • • • • • • • • • • • • FileInputStream f = null; try { f = new FileInputStream("somefile.txt"); // đọc file } catch (IOException e) { // hiển thị lỗi } finally { if (f != null) { try { f.close(); // đóng file } catch (Exception e) { // thông báo lỗi đóng file } } } 43 Lớp File • • Lớp File cho phép lấy thông tin file thư mục Một số phương thức File • • • • • • boolean exists(); // kiểm tra tồn file boolean isDirectory(); // kiểm tra xem file có phải thư mục String getParent(); // lấy thư mục cha long length(); // lấy cỡ file (byte) long lastModified(); // lấy ngày sửa file gần String[] list(); // lấy nội dung thư mục 44 Ví dụ: Hiển thị thơng tin file import java.io.*; import java.util.Date; public class FileInfo { public static void main(String[] args) { File file = new File("randfile.dat"); if ( file.exists() ) { System.out.println("Path is: " + file.getAbsolutePath()); System.out.println("It's size is: " + file.length()); Date dateModified = new Date(file.lastModified()); System.out.println("Last update is: " + dateModified); } else System.out.println("The file does not exist"); } } 45 Ví dụ: Hiện nội dung thư mục import java.io.*; public class DirList { public static void main(String[] args) { File dir = new File(".", ""); if ( dir.isDirectory() ) { String[] subFiles = dir.list(); for(int i=0; i < subFiles.length; i++) if (new File(subFiles[i]).isDirectory()) System.out.println(subFiles[i] + " "); else System.out.println(subFiles[i]); } else System.out.println("The file is not a directory"); } } 46 Tóm tắt xử lý file • • • • • Nên dùng DataInputStream DataOutputStream để nhập/xuất liệu kiểu sơ cấp (int, float ) Nên dùng ObjectInputStream ObjectOutputStream để nhập/xuất đối tượng Nên kết hợp luồng file luồng đọc/ghi ký tự để nhập xuất file ký tự Unicode Nên dùng RandomAccessFile muốn đọc/ghi tự file Dùng lớp File để lấy thông tin file 47 Một số lớp khác • java.io.StreamTokenizer • • • • java.io.FilenameFilter java.awt.FileDialog javax.swing.JFileChooser 48 Bài tập Viết chương trình mycopy sử dụng sau: j ava m ycopy filenam e1 filenam e2 • • • Nếu filename1 filename2 file chương trình copy nội dung filename1 sang filename2 Nếu filename2 thư mục copy filename1 sang thư mục filename2 Nếu filename1 có tên cho phép tạo filename2 với nội dung gõ từ bàn phím (giống lệnh copy con) Viết chương trình mydir sử dụng sau: j ava m ydir filenam e Chương trình có chức giống lệnh dir DOS 49 Bài tập Viết chương trình cho phép ngư i dùng chọn file văn bản, sau hiển thị nội dung file đối tượng TextArea (Dùng lớp JFileChooser để m hộp thoại chọn file) Viết chương trình đọc cấu trúc ảnh bitmap hiển thị hình Tham khảo cấu trúc ảnh bitmap Internet 50 Bài tập Viết chương trình quản lý danh sách thí sinh (Candidate) Chương trình cho phép thêm thí sinh, tìm kiếm, cập nhật Khi bắt đầu, chương trình lấy liệu từ file t hisinh.dat Khi kết thúc, chương trình ghi lại danh sách sinh viên vào file Có thể dùng RandomAccessFile dùng ObjectOutputStream cài đặt Serializable 51 ... thông tin file 47 Một số lớp khác • java. io.StreamTokenizer • • • • java. io.FilenameFilter java. awt.FileDialog javax.swing.JFileChooser 48 Bài tập Viết chương trình mycopy sử dụng sau: j ava m... copy con) Viết chương trình mydir sử dụng sau: j ava m ydir filenam e Chương trình có chức giống lệnh dir DOS 49 Bài tập Viết chương trình cho phép ngư i dùng chọn file văn bản, sau hiển thị nội... đoạn mã Java cần phải sử dụng Notepad phần mềm hỗ trợ soạn thảo tiếng Việt • Các bước cần thực • Lưu file source code dạng Unicode • Gõ lệnh biên dịch javac –encoding unicode filename .java • Lệnh

Ngày đăng: 22/12/2022, 16:06

w