io trong java

42
INPUT – OUTPUT TRONG JAVA TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP.HCM KHOA CÔNG NGHỆ THÔNG TIN GVHD: Th.S Trương Thị Ngọc Phượng Nhóm 1: 1.Lê Đức Cảnh – 10910018 2.Bùi Tuấn Anh – 10910032 3.Hoàng Thanh Bình – 10910034 4.Trịnh Xuân Bình - 11110013

Upload: le-canh

Post on 25-May-2015

77 views

Category:

Software


3 download

DESCRIPTION

Xuất nhập File trong Java

TRANSCRIPT

Page 1: Io trong java

INPUT – OUTPUT

TRONG JAVA

TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP.HCMKHOA CÔNG NGHỆ THÔNG TIN

GVHD: Th.S Trương Thị Ngọc PhượngNhóm 1:1.Lê Đức Cảnh – 109100182.Bùi Tuấn Anh – 109100323.Hoàng Thanh Bình – 109100344.Trịnh Xuân Bình - 11110013

Page 2: Io trong java

Phân công việc

STT Họ và tên MSSV Công việc

1 Bùi Tuấn Anh 10910032 Text File

2 Hoàng Thanh Bình 10910034 Text File

3 Lê Đức Cảnh 10910018 Binary File

4 Trịnh Xuân Bình 11110013 Binary File

Page 3: Io trong java

Nội dungI- Giới thiệu.

II- Stream.

1. Các loại Stream trong Java

2. Phân cấp các lớp nhập/xuất theo byte vật lý

3. Phân cấp các lớp nhập/xuất theo byte ký tự

4. Phân cấp các lớp nhập/xuất theo File

III. Tập tin văn bản và tập tin nhị phân

1. Tập tin văn bản(Text File)

2. Tập tin nhị phân(Binary File)

IV- Tóm tắt

Page 4: Io trong java

I. Giới thiệu

Nhập dữ liệu(Input) là tác vụ đưa các dữ liệu cụ thể vào cho biến trong chương trình. Như vậy, phải có một nguồn chứa dữ liệu (bàn phím, tập tin, biến khác).

Xuất dữ liệu là tác vụ đưa trị cụ thể của biến trong chương trình ra một nơi chứa (màn hình hay file hay biến khác).

Nhập/xuất dữ liệu là các phương tiện mà chương trình tương tác với user và thường không thể thiếu trong đa số các ứng dụng.

Page 5: Io trong java

II- Stream

Stream là một đối tượng cho phép dòng chảy dữ liệu giữa chương trình của mình và một số thiết bị nhập xuất hoặc một số tập tin.

Dòng dữ liệu đi vào chương trình được gọi là luồng nhập (input stream).

Dòng dữ liệu từ chương trình ra ngoài gọi luồng xuất (output stream).

Page 6: Io trong java

1. Các loại stream trong Java

Page 7: Io trong java

2. Phân cấp các lớp nhập theo byte vật lý

Page 8: Io trong java

2. Phân cấp các lớp xuất theo byte vật lý

Page 9: Io trong java

3. Phân cấp các lớp nhập theo ký tự

3. Phân cấp các lớp xuất theo ký tự

Page 10: Io trong java

4. Phân cấp các lớp thao tác file với hệ điều hành

Lớp File giúp truy xuất các thuộc tính của 1 file/thư mục.

Lớp FileDescriptor: Giúp đồng bộ việc truy xuất file.

Lớp RandomAccessFile giúp đọc/ghi file với dữ liệu thuộc kiểu cơ bản

Page 11: Io trong java

III. Tập tin văn bản và tập tin nhị phân (Text files and binary files)

Tập tin văn bản là các tập tin có chứa chuỗi ký tự khi xem trong một trình soạn thảo văn bản hoặc đọc bởi một chương trình.

Tập tin văn bản đôi khi còn được gọi là tập tin ASCII vì chúng chứa dữ liệu được mã hóa bằng cách sử dụng mã ASCII.

Các tập tin có nội dung phải được xử lý như chuỗi các số nhị phân được gọi là tập tin nhị phân.

Page 12: Io trong java

1.Tập tin văn bản (Text files)

Ghi vào tập tin văn bảnPhụ thêm vào tập tin văn bảnĐọc tập tin văn bản

Sử dụng ScannerSử dụng BufferedReader

Tên đường dẫnLời gọi hàm lồng nhauSystem.in, System.out và System.err

Page 13: Io trong java

1.1. Ghi vào tập tin văn bản

Mở tập tin văn bản để viết raCú pháp:PrintWriter Output_Stream_Name;Output_Stream_Name =

newPrintWriter(newFileOutputStream(File_Name));Đặt tên tập tin

Tên file theo OSMột tập tin có 2 tênIOExceptionĐóng tập tin: cú pháp Stream_Object.close();

Page 14: Io trong java

1.2. Phụ thêm vào tập tin văn bản

Output_Stream_Name=

new PrintWriter(

new FileOutputStream(File_Name, true or false));

Page 15: Io trong java

1.3. Đọc tập tin văn bản sử dụng Scanner

Cú phápScanner Stream_Object=

new Scanner(new FileInputStream(File_Name));

Demo

Page 16: Io trong java

1.4. Lớp BufferedReader và BufferedWriter

Dòng nhập/xuất ký tự có sử dụng bộ đệmGiúp nhập xuất dữ liệu theo dạng ký tự, dòng

(line) ký tự.

Method BufferedReader

Page 17: Io trong java

Minh họa

Demo

Page 18: Io trong java

1.5. Lớp File

Làm việc trực tiếp với các tập tin: Tạo, xóa, đổi tên tập tin Lấy thông tin đường dẫnKiểm tra sự tồn tại của một tập tin/ thư mục.

Page 19: Io trong java

Method File

Page 20: Io trong java

Minh họa truy xuất thuộc tính File

Demo

Page 21: Io trong java

Minh họa truy xuất thư mục File

Demo

Page 22: Io trong java

1.6. Gói java.lang và lớp SystemGói java.lang là gói cơ bản của ngôn ngữ Java

(language).Gói này chứa khai báo các lớp wrapper như

Boolean, Char, Integer,...Có lớp System mô tả cho hệ thống

Page 23: Io trong java

Gói java.lang

subclasses:

Page 24: Io trong java

public final class System extends ObjectDatastatic 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 của lớp System là các hành vi mức

hệ thống như truy xuất thời gian, truy xuất các thiết lập hệ thống (trong Config.sys), thoát JVM, nạp 1 lớp trong 1 file, nạp 1 thư viện, kết thúc 1 object, thiết lập thiết bị nhập xuất hệ thống khác với các thiết bị xuất nhập chuẩn, lấy/thiết lập cơ chế bảo mật…

Page 25: Io trong java

public final class System extends Object ....

Các method thường dùng:static long currentTimeMillis() lấy giờ hệ thống

theo millisec so với 12 giờ đêm ngày 1/1/1970static long nanoTime() lấy giờ hệ thống theo

nanosec (chỉ có từ Java 1.5.0)static void exit(int status) kết thúc JVMstatic 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)

Page 26: Io trong java

Thí dụ về truy xuất thông tin hệ thống

Demo

Page 27: Io trong java

2. Tập tin nhị phân (Binary File)

- Binary Files là một tập tin máy tính mà có thể chứa bất kỳ loại dữ liệu, mã hóa dưới dạng nhị phân để lưu trữ máy tính và mục đích chế biến nhằm mục đích xử lý để cho các chương trình đọc.- Các luồng dành cho xử lý binary file là ObjectInputStream và ObjectOutputStream. Các luồng này có thể tự động chuyển số và kí tự thành byte và chứa trong binary file.

Page 28: Io trong java

DataInputStream và DataOutputStream

DataInput interface được dùng để đọc các byte nhị phân từ 1 dòng byte vật lý (InputStream) và xây dựng lại các byte này thành các dữ liệu có kiểu cơ bản (primitive data types). Inteface này cũng chuyển đổi chuỗi dạng UTF-8 có sửa đổi thành dữ liệu dạng String .

DataOutput interface lại làm ngược lại những gì mà DataInput interface đã làm.

2.1. Viết dữ liệu đơn giản với Binary file

Page 29: Io trong java

Là 2 interface con của DataInput và DataOutput interfaces cho việc nhập xuất đối tượng.

ObjectInputStream và ObjectOutputStream

Page 30: Io trong java

Object Input Stream

Page 31: Io trong java

Object Output Stream

Demo

Page 32: Io trong java

- Java sử dụng 2 dạng trình bày của văn bản+ Unicode dùng biểu diễn ký tự & chuỗi trong bộnhớ+ UTF dùng cho nhập xuất- Unicode dùng 16 bit để biểu diễn 1 ký tự.- UTF+ Viết tắt của “UCS Transformation Format,”+ UCS: “Universal Character Set.”+ Dạng nén của ký tự Unicode16-bit.+ UTF mã hoá các ký tự với số bit đủ để biểu diễn ký tự

2.2. Unicode & UTF

Page 33: Io trong java

2.3. Lớp RandomAccessFile

- Truy xuất ngẫu nhiên, di chuyển (seek) đến 1 vị trí tuỳ ý- Đọc hoặc ghi lượng dữ liệu tuỳ ý. - Hỗ trợ đọc ghi dữ liệu theo kiểu nguyên thuỷ- Mỗi thao tác đọc ghi tự động di chuyển con trỏ đến vị trí mới- long length() throws IOException: kích thước= bytes.- void seek(long position) throws IOException:- Di chuyển tương đối so với đầu file

Page 34: Io trong java

- RandomAccessFile không dẫn xuất từ InputStream hay OutputStream mà nó hiện thực các interface DataInput, DataOutput (có định nghĩa các phương thức I/O cơ bản).- RandomAccessFile hỗ trợ vấn đề định vị con trỏ file bên trong một file dùng phương thức seek(long newPos).

Page 35: Io trong java

Lớp RandomAccessFile...ConstructorsRandomAccessFile(File f, String mode)RandomAccessFile(String Filename, String mode)

mode Ý nghĩa

"r" Mở file chỉ để đọc , có thể gây lỗi IOException.

"rw" Mở file đổ đọc + ghi. Nếu file chưa có thì sẽ tạo mới file này.

"rws" Mở file để đọc + ghi. Nếu có hiệu chỉnh nội dung hay dữ liệu mô tả file (metadata) thì đòi hỏi phải được ghi đồng bộ.

"rwd"   Mở file để đọc + ghi và mỗi khi có hiệu chỉnh nội dung file thì phải được đồng bộ.

Page 36: Io trong java

Lớp RandomAccessFile...

RandomAccessFile Method Summary

 void close() – Đóng file.

 FileChannel getChannel() Lấy đối tượng FileChannel kết hợp với .

 FileDescriptorgetFD() Lấy FileDescriptor.

 long getFilePointer() - Lấy vị trí truy xuất hiện hành.

 long length() - Lấy đ9ộ dài file.

 intvoid

read() Đọc 1 byte.write(int b) ghi 1 byte vào vị trí hiện hành

 intvoid

read(byte[] b) Đọc 1 mảng byte- trả về số byte đọc được.write(byte[] b) ghi mảng b

 intvoid

read(byte[] b, int off, int len)write(byte[] b, int off, int len) Đọc/ghi len byte đưa vào mảng b từ vị trí off, trả về số byte đọc được.

 booleanvoid

readBoolean() Đọc/ghi 1 trị boolean.writeBoolean (boolean v)

 bytevoid

readByte() Đọc.ghi 1 trị 8 bit có dấu.writeByte ( int x)

 charvoid

readChar() - Đọc 1 ký tự Unicode .writeChar( int v) ghi 1 ký tự 2 byte, byte cao ghi trước

 doublevoid

readDouble() Đọc/ ghi 1 trị double.writeDouble ( double x) – ghi dạng longbits 8 bytes

Page 37: Io trong java

Lớp RandomAccessFile... float

voidreadFloat() Đọc/ ghi 1 trị float.writeFloat( float x) ghi dạng intbit 4 bytes

 void readFully(byte[] b) Đọc ra cả 1 mảng byte từ vị trí hiện hành.

 void readFully(byte[] b, int off, int len) Đọc len byte từ vị trí hiện hành đưa vào vị trí off của mảng b.

 intvoid

readInt() Đọc 1 số integercó dấu 32 bit  .writeInt(int x)

 String readLine() Đọc 1 dòng kể từ vị trí hiện hành.

 longvoid

readLong() Đọc 1 số long có dấu (64 bit).writeLong(long x) , 8 byte, byte cao ghi trước

 shortvoid

readShort() Đọc 1 số short có dấu (16 bit).writeShort(short x)

 int readUnsignedByte() Đọc 1 byte không dấu (8 bit).

 int readUnsignedShort() Đọc 1 số short không dấu (16 bit).

 Stringvoid

readUTF() Đọc 1 chuỗi.writeUTF(String S) ghi chuỗi dạng mã UTF-8 độc lập máy chủ

 void seek(long pos) Nhẩy đến vị trí pos từ đầu file.

 void setLength(long newLength) ấn định độ dài file.

 int skipBytes(int n) Bỏ qua n bytes.

 void writeBytes(String s) Ghi chuỗi dạng nhóm các bytes.

 void writeChars(String s) Ghi chuỗi dạng nhóm ký tự.

Page 38: Io trong java

Minh họa lớp RandomAccessFile

Demo

Page 39: Io trong java

2.4. Binary I/O của Object

Các lớp chỉ cần implement interface Serializable.class của object phải implements interface Serializable để thống nhất cách đọc ghi object của hai tác vụ readObject và writeObject.Việc đồng bộ cơ chế đọc ghi đối tượng thông qua hành vi toString(), tuần tự hóa dữ liệu của đối tượng.

Demo

Page 40: Io trong java

2.5. The Serializable interface

- Khai báo implements Serializable để tạo khảnăng tuần tự hóa cho các đối tượng của lớp- Serializablelà 1 interface phân loại, (tag interface)+ public interface Serializable { }+ Không có phương thức nàoVí dụ: public classPerson implements Serializable{}

Page 41: Io trong java

Một mảng là một đối tượng và do đó là một tham số cho writeObject. Một mảng nguyên có thể được lưu vào binary file sử dụng writeObject và đọc sau đó sử dụng readObject. Khi làm như vậy, nếu mảng có kiểu cơ sở là một lớp thì lớp đó phải là Serializable. Điều này có nghĩa là nếu lưu trữ tất cả dữ liệu cho một lớp Serializable trong một mảng đơn, sau đó có thể xuất tất cả dữ liệu vào một binary file với một sự dẫn ra của writeObject.

2.6. Mảng Object trong binary file

Demo

Page 42: Io trong java