0

InputStream: là luồng nhập dữ liệu Để đọ dữ liệu từ file thì

Một phần của tài liệu NGÔN NGỮ LẬP TRÌNH BẰNG JAVA (Trang 42-42 )

đôi tượng /npwufStream có thê là FilelnputStream.

Ví dụ: dùng DataOutputStream và DatalnputStream để ghi và

đọc những kiểu đữ liệu khác nhau trên file. ImpOFT† Javd.1o. *;

class RWDaf1a

í

public static votd main(Strimng args[ ]) throws IOException

í

DafaOufputStream datfaOut; DafaOufputStream datfaOut; DafalnputStream datadln; mí 1 = 10; double d = I1023.56; boolean b = true; fry

í

dataOut = new DatfaOMfDutStream(

new FIleOutputStream(”D-Westdata"));

cafch(IOExceptton exc) 142

Sysfem.out.println( “Cannot open flÌe. "); return;

j

fry

í

Syster.ouf.printlm( "Wriing ˆ + 1); dataOut.writelnf(1); Systemr.ouf.primfin( "Wriing ” + đ); dataOut.writelouble(d); Systemr.ouf.primfin( "Wriing ” + b); dataOut.writeBoolean(B);

System.out.printim( "Wrtting ” + I2.2 * 7.4);

dataOut.writelouble(I2.2 * 7.4);

j

cafch(IOExceptton exc)

í

Sysfem.ouft.println( "Write error. ");

j

dataOut.close(); Sysfem.ouf.printlm();

⁄ Now, read them bacĂ. ƒry

(

dataln = new DatalnputStream(

new FilelnputStream(”D:\Westdata "));

j

cafch(IOExceptton exc)

í

Sysfem.out.println( “Cannot open flÌe. "); return;

j

/ry

í

¡ = dataln.reqadlmt(); Sysfem.out.printim(“Reading ” + 1); đ = dataln.readDouble(); System.out.printim(“Reading ” + đ); b = dataln.readBoolean(); System.out.printim(“Reading ” + b); đ = dataln.readDouble(); System.out.printim(“Reading ” + đ);

j

cafch(IOExceptton exc)

(_ System.out.println( “Read error. ");

dataln.close();

Kết quả thực thi chương trình: Dữ liệu ghi xuông file D:\Wtestdata

“II li 0D hi lo : - |H| x|

Fls Erit Fasrmat Haln

HŒ4[1ủzá@ L] [3V °ẽ... LÍ Er

+ È -

Kêt quả đọc và xuât ra Console:

61 |E:VvIEreatorV3VGE2DDT.exe 18 18 1833.5b †: ru b_ F4: HN.) 123.5

Press an keụ tũ cũntinue. ..

5.4.File truy cập ngẫu nhiên (Random Access Eiles)

Bên cạnh việc xử lý xuất nhập trên file theo kiểu tuần tự

thông qua các luông, java cũng hỗ trợ truy cập ngẫu nhiên nội dung của một ñle nào đó dùng andomAccessFile. RandomAccessFile không dẫn xuật từ InputStream hay OutputSteam mà nó hiện thực các mterface Dafalnput, DafaOwfpuf (có định nghĩa các phương thức ƯO cơ bản).

RandomAccessEile hỗ trợ vân đề định vị con trỏ file bên trong

một file dùng phương thức seek(long newPos).

Ví dụ: minh họa việc truy cập ngẫu nhiên trên file. Chương

trình ghi 6 sô kiêu double xuông file, rôi đọc lên theo thứ tự

ngâu nhiên.

ImpOFT† Javd.1o. *;

class RandomAccessDemo

í

public static votd main(Strimng args[ ]) throws IOException

í

double đata[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25}; double đata[] = {19.4, 10.1, 123.54, 33.0, 87.9, 74.25}; double đ; RandomAccessFile raƒ; fry

í

rafốỒ. = new RandomAccessFile(”D:\Wandom.dat”,

muy" :

j

cafch(FileNotFoundExcepfIon exc)

í

Sysfem.out.println( “Cannot open flÌe. "); return ;

⁄.Write values to the file.

ƒor(imt i1=0; 1 < data.length; Ii++)

í

fry fry

í

raƒ.writeDouble(data[1]);

j

cafch(IOExceptton exc)

í

Sysfem.ouft.printlm( “Error wrlting 1o fle. "); return ;

j j

j

fry

í

⁄ Now, reqad back specffc vaÌues raƒ.seek(0); 4 seek to first double d = raƒ.readouble();

Sysferm.oUft.prIntlm{( “FTrst value 1s ” + đ); raƒ.seek(8); 4 seek to second double d = raƒ.readouble();

Sysfem.ouft.printÌm{( “Second valMe 1s ” + đ); raƒ.seek(8 * 3); ⁄/ seek to {ourth double d = raƒ.readouble();

Syste.out.printlm(“Fourth value ts ” + đ); Sysfđ.OUf.prIHIm();

⁄ Now, reqd every other value.

Sysfemt.ouft.printlm( “Here 1s every other valMde: ”);

ƒor(imt =0; 1 < data.length; i+=2) (_ raƒ.seek(S *1); seek to ith double

d = raf.readDouble(); Sysfem.ouf.prim(d + ” ”);

Sysfem.ouf.printlm( NI”);

7

cafch(IOExceptton exc)

í

7

raƒ.close();

Sysfem.ouft.printlm( “Error seeking or reqdIng. ");

Kết quả thực thi chương trình:

E:vIEreator/3XBE2HIT.ewe First ualue 1s 19.4 kernnd ualue is 10.1 Fouth ualue 1s 33.

I1 G03... 08i 0 19.4 123.54 82.9

IS. no: ho. ai:

5.5.Sử dụng luồng ký tự

Chúng ta đã tìm hiểu và sử dụng luông byte để xuât/nhập dữ liệu. Tuy có thể nhưng trong một số trường hợp luỗông byte không phải là cách “lý tưởng” để quản lý xuất nhập dữ liệu kiểu character, vì vậy java đã đưa ra kiểu luỗng character phục vụ

cho việc xuất nhập dữ liệu kiểu character trên luồng.

Mức trên cùng là hai lớp trừu tượng ®eader và Wrirer. Lớp

Reader dùng cho việc nhập dữ liệu của luồng, lớp Wrzzer dùng

cho việc xuất dữ liệu của luồng. Những lớp dẫn xuất từ Reader và Wrirer thao tác trên các luông ký tự Unicode.

Những phương thức định nghĩa trong lớp trừu tượng Reader và Writer

Phương thức Ý \ghña

Reader

abstract void cÏlose( ) Đóng luông

void mark(int nunChars) Đánh dâu vị trí hiện tại trên luông

boolean markSupported( ) Kiểm tra xem luông có hỗ trợ thao tác đánh dâu rmark() không?

im† read( ) Đọc một ký tự

immt read(char buƒƒfer† ]) Đọc buffer.length ký tự cho vào bufer

abstract Int read(char

bujJer[ Ì,

In† Oƒfset,

imm† nưnChars)

Đọc numChhars ký tự cho vào

vùng đệm buffer tại vị trí buffer[offset]

boolean readly( ) Kiêm tra xem luông có đọc được

không?

void resef( ) Dời con trỏ nhập đến vị trí đánh dâu trước đó

long skip(long nunChars) Bỏ qua numChars của luông nhập

Writer

abstract void cÏlose( ) Đóng luông xuât. Có lỗi ném ra IOException

abstract vold ƒÏush( ) Dọn dẹp luông (buffer xuât)

Một phần của tài liệu NGÔN NGỮ LẬP TRÌNH BẰNG JAVA (Trang 42 -42 )