Lists là m t chu i cú th t cỏc ph n t cho phộp cỏc ph n t cú th gi ng nhau. Listsộ ỗ ứ ự ầ ử ầ ử ể ố là m t giao di n k th a giao di n Collections nờn nú cho phộp l p trỡnh viờn truy c p cỏcộ ệ ế ừ ệ ậ ậ ph n t qua ch s . Cỏc l p t p h p cài đ t Lists là ArrayList, LinkedList và Vector.ầ ử ỉ ố ớ ậ ợ ặ
ArrayList là m t l p t p h p cú th thay đ i kớch thộ ớ ậ ợ ể ổ ước. V c b n thỡ ArrayList gi ngề ơ ả ố v i Vector chỳng ta đó xem xột trờn.ớ ở
Sau đõy là chương trỡnh vớ d s d ng ArrayList. đõy ta đ t cỏc đ i tụ ử ụ Ở ặ ố ượng String và Color vào cựng m t ArrayList sau đú xúa đi cỏc ph n t String s d ng m t đ i tộ ầ ử ử ụ ộ ố ượng Iterator.
import java.awt.Color; import java.util.*;
public class CollectionTest {
private String colors[] = { "red", "white", "blue" }; // T o m t ArrayList, thờm cỏc ph n t cho núạ ộ ầ ử public CollectionTest()
{
ArrayList list = new ArrayList();
// Thờm đ i tố ượng cho nú
list.add( Color.magenta ); // Thờm m t đ i tộ ố ượng Color // Thờm cỏc đ i tố ượng String
for ( int count = 0; count < colors.length; count++ ) list.add( colors[ count ] );
list.add( Color.cyan ); // Thờm m t đ i tộ ố ượng Color // In ra n i dungộ
System.out.println( "\nArrayList: " );
for ( int count = 0; count < list.size(); count++ ) System.out.print( list.get( count ) + " " ); // Xúa t t c cỏc đ i tấ ả ố ượng String removeStrings( list );
// output list contents
System.out.println( "\n\nArrayList sau khi g i removeStrings: " );ọ for ( int count = 0; count < list.size(); count++ )
System.out.print( list.get( count ) + " " ); }
public void removeStrings( Collection collection ) {
// Khai bỏo đ i tố ượng iterator
iterator iterator = collection.iterator(); // L p trong khi t p h p v n cũn ph n tặ ậ ợ ẫ ầ ử while ( iterator.hasNext() )
if ( iterator.next() instanceof String ) iterator.remove(); // Xúa ph n tầ ử }
// Hàm main
public static void main( String args[] ) {
new CollectionTest(); }
}
Bài t pậ
1. Vi t chế ương trỡnh qu n lý danh sỏch m t l p h c v i cỏc ch c năngả ộ ớ ọ ớ ứ - Tỡm ki m sinh viờnế
- Thờm sinh viờn. - Xúa sinh viờn
- S p x p danh sỏch theo tờnắ ế
2. Vi t chế ương trỡnh nh p vào n s nguyờn và s th c, n nh p t bàn phớm. Sau đú:ậ ố ố ự ậ ừ - Tớnh t ng c a n s này.ổ ủ ố
- S p x p n s theo th t tăng d nắ ế ố ứ ự ầ
Đ tài 6. Cỏc lu ng vào ra d li u v i fileề ồ ữ ệ ớ
M t kh năng quan tr ng mà cỏc ngụn ng l p trỡnh ph i cú là vi c qu n lý cỏc lu ngộ ả ọ ữ ậ ả ệ ả ồ d li u vào ra h th ng mỏy tớnh giỳp cỏc chữ ệ ệ ố ương trỡnh cú th giao ti p d li u v i th gi iể ế ữ ệ ớ ế ớ bờn ngoài.
I. Khỏi ni m lu ng vào ra (I/O stream)ệ ồ
Lu ng là dũng ch y c a d li u. Cú 2 lo i lu ng: ồ ả ủ ữ ệ ạ ồ
• Lu ng nh p (input stream): là t t c gỡ t th gi i bờn ngoài đồ ậ ấ ả ừ ế ớ ược đ a vào mỏyư tớnh, nh đ c t bàn phớm, đ c t t p tin...ư ọ ừ ọ ừ ậ
• Lu ng xu t (output stream): là t t c nh ng gỡ đồ ấ ấ ả ữ ược g i t mỏy tớnh ra ngoàiử ừ thụng qua cỏc thi t b ngo i vi, nh màn hỡnh, mỏy in, t p tin, ...ế ị ạ ư ệ
Đ i v i m i lu ng l i cú cỏc dũng bao g m:ố ớ ộ ồ ạ ồ
• L p System.out: Dũng xu t chu n dựng đ hi n th k t qu trờn màn hỡnh.ớ ấ ẩ ể ể ị ế ả • L p System.in: Dũng nh p chu n thớ ậ ẩ ường đ n t bàn phớm và đế ừ ược dựng để
đ c cỏc ký t d li u.ọ ự ữ ệ
• L p System.err: Đõy là dũng l i chu n cho phộp m t chớ ỗ ẩ ộ ương trỡnh đ a ra cỏcư thụng bỏo l i trờn màn hỡnh.ỗ
Cỏc dũng này cú th b đ i hể ị ổ ướng đ n nhi u ngu n khỏc nhau. Vớ d System.err cú thế ề ồ ụ ể đ a thụng bỏo l i ra m t file. ư ỗ ộ
Khi c n làm vi c v i lu ng, ta khai bỏo kh i th vi n:ầ ệ ớ ồ ố ư ệ import java.io.*;
Th vi n này cho phộp ta làm vi c v i cỏc lu ng nh p xu t qua vi c cung c p cỏc l p:ư ệ ệ ớ ồ ậ ấ ệ ấ ớ FileInputStrem, FileOutputStream, FileReader, FileWriter và r t nhi u l p khỏc. ấ ề ớ
S phõn c p cỏc class trong gúi java.io th hi n qua b ng sau:ự ấ ể ệ ả java.lang.Objec t File FileDescriptor InputStream ByteArrayInputStream FileInputStream FilterInputStream BufferedInputStream DataInputStream PushbackInputStream ObjectInputStream PipedInputStream SequenceInputStream OutputStream ByteArrayOutputStream FileOutputStream FilterOutputStream BufferedOutputStream DataOutputStream PrintStream 78
ObjectOutputStream PipedOutputStream RandomAccessFile Reader BufferedReader LineNumberReader CharArrayReader FilterReader PushbackReader InputStreamReader FileReader PipedReader StringReader Writer BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter FileWriter PipedWriter PrintWriter StringWriter
Sau đõy chỳng ta xem xột cỏc class quan tr ng thọ ường đượ ử ục s d ng:
II. L p InputStream:ớ
Là m t l p tr u tộ ớ ừ ượng đ nh nghĩa cỏch th c nh n d li u. Cú cỏc phị ứ ậ ữ ệ ương th c chớnhứ sau:
• read(): Đ c cỏc byte d li u t m t dũng. N u nh khụng cú byte d li u nào,ọ ữ ệ ừ ộ ế ư ữ ệ nú ph i ch . Khi m t phả ờ ộ ương th c ph i ch , cỏc lu ng đang th c hi n ph iứ ả ờ ồ ự ệ ả t m d ng cho đ n khi cú d li u. ạ ừ ế ữ ệ
• read(byte[]): Tr v s byte đ c đả ề ố ọ ược hay ‘-1’ n u nh đó đ c đ n cu i dũng.ế ư ọ ế ố Nú gõy ra ngo i l IOException n u cú l i x y ra. ạ ệ ế ỗ ả
• read(byte[],int,int): Nú cũng đ c vào m t m ng byte. Nú tr v s byte th c sọ ộ ả ả ề ố ự ự đ c đọ ược cho đ n khi k t thỳc dũng. Nú gõy ra ngo i l IOException n u l iế ế ạ ệ ế ỗ x y ra. ả
• available(): Phương phỏp này tr v s lả ề ố ượng byte cú th đ c để ọ ược mà khụng ph i ch . Nú tr v s byte hi n t i cú trong dũng. Nú khụng ph i là phả ờ ả ề ố ệ ạ ả ương th c tin c y đ th c hi n ti n trỡnh x lý đ u vào. ứ ậ ể ự ệ ế ử ầ
• close(): Phương th c này đúng dũng. Nú dựng đ gi i phúng m i tài nguyờnứ ể ả ọ dũng đó s d ng. Luụn luụn đúng dũng đ ch c ch n r ng dũng x lý đử ụ ể ắ ắ ằ ử ược k tế thỳc. Nú gõy ra ngo i l IOException n u l i x y ra.ạ ệ ế ỗ ả
• mark(): Đỏnh d u v trớ hi n t i c a dũng. ấ ị ệ ạ ủ
• markSupported(): Tr v giỏ tr boolean ch ra r ng dũng cú h tr cỏc kh năngả ề ị ỉ ằ ỗ ợ ả mark và reset hay khụng. Nú tr v true n u dũng h tr ngả ề ế ỗ ợ ượ ạ ả ềc l i tr v false. • reset(): Phương th c này đ nh v l i dũng theo v trớ đứ ị ị ạ ị ược đỏnh l n cu i cựng.ầ ố
• skip(): Phương th c này b qua ‘n’ byte dũng vào. ’-n’ ch đ nh s byte đứ ỏ ỉ ị ố ược bỏ qua. Nú gõy ra ngo i l IOException n u l i x y ra. Phạ ệ ế ỗ ả ương th c này s d ngứ ử ụ đ di chuy n t i v trớ đ c bi t bờn trong dũng vào. ể ể ớ ị ặ ệ
III. L p OutputStreamớ
Là l p tr u tớ ừ ượng đ nh nghĩa cỏch ghi cỏc k t xu t đ n dũng. Nú cung c p m t t p cỏcị ế ấ ế ấ ộ ậ phương th c tr giỳp t o ra, ghi và x lý k t xu t cỏc dũng. Cỏc phứ ợ ạ ử ế ấ ương th c bao g m: ứ ồ
• write(int): Phương th c này ghi m t byte.ứ ộ
• write(byte[]): Phương th c này phong to cho đ n khi m t byte đứ ả ế ộ ược ghi. Dũng ph i ch cho đ n khi tỏc v ghi hoàn t t. Nú gõy ra ngo i l IOException n uả ờ ế ụ ấ ạ ệ ế l i x y ra.ỗ ả
• write(byte[], int, int): Phương th c này ghi m ng cỏc byte. L p OutputStreamứ ả ớ đ nh nghĩa ba d ng khỏc nhau c a phị ạ ủ ương th c đ cú th ghi m t byte riờng l ,ứ ể ể ộ ẻ m t m ng cỏc byte, hay m t đo n c a m t m ng byte. ộ ả ộ ạ ủ ộ ả
• flush(): Phương th c này x s ch dũng. Đ m d li u đứ ả ạ ệ ữ ệ ược ghi ra dũng. Nú kớch ho t IOException n u l i x y ra.ạ ế ỗ ả
• close(): Phương th c đúng dũng. Nú đứ ược dựng đ gi i phúng m i tài nguyờnể ả ọ g n v i dũng. Nú kớch ho t IOException n u l i x y ra. ắ ớ ạ ế ỗ ả
IV. L p FileInputStreamớ
K th a t InputStream, l p này cho phộp đ c vào t m t t p tin dế ừ ừ ớ ọ ừ ộ ậ ưới d ng m tạ ộ stream. Cỏc đ i tố ượng c a l p này đủ ớ ượ ạc t o ra nh đờ ường d n t i file, đ i tẫ ớ ố ượng File, ho cặ đ i tố ượng FileDescriptor làm m t đ i s . ộ ố ố
L p này cú 3 phớ ương th c kh i t o sau:ứ ở ạ
• FileInputStream(String name): Tham s là tờn c a t p tin đ t o lu ng.ố ủ ậ ể ạ ồ • FileInputStream(File f): Tham s là đ i tố ố ượng file đ t o lu ng.ể ạ ồ
• FileInputStream(FileDescriptor fdObj): Tham s là đ i tố ố ượng FileDescriptor để t o lu ng.ạ ồ
Vớ d :ụ
InputStream in = new FileInputStream(“C:\\LETI\\JAVA\\Account.txt”);
V. L p FileOutputStreamớ
L p này cung c p kh năng ghi d li u xu ng t p tin, đớ ấ ả ữ ệ ố ậ ược d n xu t t l p chaẫ ấ ừ ớ OutputStream. Cú 3 phương th c kh i t o:ứ ở ạ • FileOutputStream(String name); • FileOutputStream(File f); • FileOutputStream(FileDescriptor fdObj) VI. L p Fileớ
L p này đớ ượ ử ục s d ng đ truy c p cỏc đ i tể ậ ố ượng t p tin và th m c. Cỏc t p tin đ tậ ư ụ ậ ặ tờn theo qui ước đ t tờn t p tin c a h đi u hành. L p này cung c p cỏc phặ ậ ủ ệ ề ớ ấ ương th c thi t l pứ ế ậ cỏc t p tin và cỏc th m c. T t c cỏc thao tỏc th m c và t p tin đậ ư ụ ấ ả ư ụ ậ ược th c hi n thụng quaự ệ cỏc phương th c c a l p File. Nh v y, ta dựng File trong t t c cỏc thao tỏc qu n lý file vàứ ủ ớ ư ậ ấ ả ả th m c.ư ụ
Cú 3 cỏch đ t o cỏc đ i tể ạ ố ượng t l p File:ừ ớ • File(String path);
• File(String path, String name); • File(File dir, String name);
Vớ d :File f = new File("C:\jdk1.4\bin\hello.java");ụ ho cặ
File f = new File("C:\jdk1.4\bin", "hello.java"); ho cặ
File curDir = new File(".");
File f = new File(curDir, "Hello.java"); Cỏc phương th c:ứ
• public String getName(): l y tờn đ i tấ ố ượng t p tin.ậ • public String gePath(): l y đấ ường d n c a t p tin.ẫ ủ ậ
• public String getAbsolutePath(): l y đấ ường d n tuy t đ i c a t p tin.ẫ ệ ố ủ ậ • public String getParent(): l y tờn th m c cha.ấ ư ụ
• public Boolean createNewFile(): t o m t t p tin m i.ạ ộ ậ ớ
• public void createTempFile(String pattern, File dir): t o t p tin t m th i.ạ ậ ạ ờ • public void deleteOnExit(): yờu c u xoỏ t p tin khi chầ ậ ương trỡnh ch m d t.ấ ứ • public boolean canWrite(): cho bi t tin cú cho phộp ghi hay khụng (true n u cú).ế ế • public boolean canRead(): cho bi t t p tin đế ậ ược phộp đ c hay khụng (true n uọ ế
cú)
• public void setReadOnly(): đ t thu c tớnh ch đ c.ặ ộ ỉ ọ
• public boolean isFile(): cho bi t t p tin cú h p l hay khụng (true n u cú).ế ệ ợ ệ ế
• public boolean isDirectory(): cho bi t t p tin cú ph i th m c hay khụng (trueế ậ ả ư ụ n u cú). ế
• public boolean isHidden(): ki m tra xem t p tin cú n hay khụng (true n u cú).ể ậ ẩ ế • public long length(): cho bi t kớch thế ướ ậc t p tin (byte).
• public boolean mkdir(): t o m t th m c t đ i tạ ộ ư ụ ừ ố ượng file, true n u thành cụng.ế • renameTo(File dest): đ i tờn t p tin hi n t i sang tờn m i.ổ ậ ệ ạ ớ
• public String[ ] list(): l y danh sỏch cỏc t p tin và th m c.ấ ậ ư ụ
• public String[ ] list(FilenameFilter filter): l y danh sỏch t p tin tho món đi uấ ậ ả ề ki n l c, vớ d *.gif.ệ ọ ụ
• public booean delete(): xoỏ t p tin, true n u xoỏ thành cụng.ậ ế • public String toString(): tr v đả ề ường d n c a t p tin.ẫ ủ ậ
• public String toURL(): tr v đ i tả ề ố ượng URL tương ng v i t p tin.ứ ớ ậ Chương trỡnh vớ d :ụ
public class Test {
public static void main(String args[]) {
File f = new File("test");
System.out.println(f.getAbsolutePath()); // L y đấ ường d n tuy t đ iẫ ệ ố System.out.println(f.exists()); // Ki m tra s t n t iể ự ồ ạ
} }
VII. Nh p xu t l c ậ ấ ọ
Là m t ki u dũng cú độ ể ượ ừ ệc t vi c thay đ i cỏch x lý dũng hi n cú. Cỏc l p, cỏc dũngổ ử ệ ớ nh p xu t l c c a java s giỳp ta l c vào/ra theo m t s cỏch. ậ ấ ọ ủ ẽ ọ ộ ố
B l c n m gi a m t dũng nh p và m t dũng xu t. Nú th c hi n x lý m t quỏ trỡnhộ ọ ằ ữ ộ ậ ộ ấ ự ệ ử ộ nào đú trờn cỏc byte được truy n t đ u vào đ n đ u ra.ề ừ ầ ế ầ
Cỏc b l c cú th ghộp v i nhau khi đú đ u ra c a b l c này tr thành đ u vào c a bộ ọ ể ớ ầ ủ ộ ọ ở ầ ủ ộ l c kia. ọ
VII.1 L p FilterInputStream: ớ
Đõy là l p tr u tớ ừ ượng. Nú là cha c a t t c cỏc l p dũng nh p l c. M t dũng cú thủ ấ ả ớ ậ ọ ộ ể được đ c và đ a k t qu cho m t dũng khỏc. ọ ư ế ả ộ
L p FilterInputStream đớ ược thi t k sao cho cú kh năng k t chu i nhi u b l c. Đế ế ả ế ỗ ề ộ ọ ể th c hi n đi u này chỳng ta dựng vài t ng l ng nhau. ự ệ ề ầ ồ
VII.2 L p FilterOutputStreamớ
L p này là m t d ng b tr cho l p FilterInputStream. Nú là l p cha c a t t c cỏc l pớ ộ ạ ổ ợ ớ ớ ủ ấ ả ớ dũng xu t l c. D li u ghi vào l p này cú th s a đ i theo nhu c u đ th c hi n tỏc v l c vàấ ọ ữ ệ ớ ể ử ổ ầ ể ự ệ ụ ọ sau đú được chuy n t i đ i tể ớ ố ượng OutputStream.
VIII. Vào/ra cú s d ng b đ m ử ụ ộ ệ
Vựng đ m là kho l u tr d li u. Chỳng ta cú th l y d li u t vựng đ m thay vỡệ ư ữ ữ ệ ể ấ ữ ệ ừ ệ quay tr l i ngu n ban đ u c a d li u.ở ạ ồ ầ ủ ữ ệ
Java s d ng c ch nh p/xu t cú l p vựng đ m đ t m th i l p cache d li u vào/raử ụ ơ ế ậ ấ ậ ệ ể ạ ờ ậ ữ ệ c aủ
m t dũng. Nú giỳp chộ ương trỡnh đ c/ghi lọ ượng d li u nh khụng nh hữ ệ ỏ ả ưởng l n đ n hi uớ ế ệ năng chung c a h th ng. ủ ệ ố
VIII.1 L p BufferedInputStream:ớ
L p này t đ ng t o ra và duy trỡ vựng đ m đ h tr thao tỏc vào. Nh đú chớ ự ộ ạ ệ ể ỗ ợ ờ ương trỡnh cú th đ c d li u t dũng t ng byte m t mà khụng nh hể ọ ữ ệ ừ ừ ộ ả ưởng đ n t c đ th c hi nế ố ộ ự ệ c a h th ng. ủ ệ ố
VIII.2 L p BufferedOutputStreamớ
L p này đ nh nghĩa hai phớ ị ương th c thi t l p, m t cho phộp ch đ nh kớch c c a vựngứ ế ậ ộ ỉ ị ỡ ủ đ m xu t, m t s d ng kớch c vựng đ m ng m đ nh. L p này đ nh nghĩa ch ng t t c cỏcệ ấ ộ ử ụ ỡ ệ ầ ị ớ ị ồ ấ ả phương th c c a OutputStream và khụng đ a thờm b t kỡ phứ ủ ư ấ ương th c m i nào. ứ ớ
Chương trỡnh sau đõy đ c và ghi thụng tin c a đ i tọ ủ ố ượng SinhVien theo m t format,ộ m i sinh viờn n m trờn m t dũng trong file:ỗ ằ ộ
// Ke thua lop People import java.io.*;
import java.util.StringTokenizer; public class SinhVien extends People {
private String Lop;// Ten lop
private double DiemTongKet; // Diem tong ket public final String mauda ="vang";//Hang so private int ID;// Ma so SinhVien
protected static int MaSo;// ma so chung de cap phat cho moi sinh vien public SinhVien(int ns,String ht,String l,double dtk)
{
super(ns,ht);//goi constructor cua lop cha la People Lop = l;
DiemTongKet=dtk;
// Id cua SinhVien duoc gan bang gia tri MaSo hien thoi cua lop ID=MaSo;
// Tang ma so len 1 den gan cho SinhVien sau MaSo+=1;
}
// Phuong thuc tinh tuoi protected int TinhTuoi() {
java.util.Date homnay = new java.util.Date(); return (homnay.getYear() - NamSinh +1); }
// Khai bao chong phuong thuc toString() public String toString()
{ return String.valueOf(ID)+ "|" + String.valueOf(this.TinhTuoi()) + "|" + String.valueOf(DiemTongKet)+"|" + HoVaTen; }
// Ghi thụng tin sinh viờn vào file
public void GhiData(PrintWriter out) throws IOException {
out.println(this.toString()); }
// Đ c thụng tin 1 sinh viờn t b đ m đ cọ ừ ộ ệ ọ
public void DocData(BufferedReader in) throws IOException {
String s = in.readLine(); // Đ c m t dũng trong b đ mọ ộ ộ ệ StringTokenizer t = new StringTokenizer(s, "|");
MaSo = Integer.parseInt(t.nextToken()); NamSinh = Integer.parseInt(t.nextToken()); DiemTongKet = Double.parseDouble(t.nextToken()); HoVaTen = t.nextToken(); } // Ham main
public static void main(String[] argv) {
// Dat gia tr bien static, sinh vien dau tien co ma so 1ị SinhVien.MaSo=1;
// bien doi tuong Vector l u cỏc sinh viờnư java.util.Vector sv = new java.util.Vector(5);
SinhVien k1 = new SinhVien(80,"Nguyen Thi Mai 1","Letio3",5); sv.addElement(k1); // Them sinh vien vao Vector
SinhVien k2 = new SinhVien(81,"Tran Thi Mai 2","Letio3",6); sv.addElement(k2);
SinhVien k3 = new SinhVien(82,"Pham Thi Mai 3","Letio3",7); sv.addElement(k3);
SinhVien k4= new SinhVien(83,"Phan Thi Mai 4","Letio3",8); sv.addElement(k4);
SinhVien k5= new SinhVien(84,"Hoang Thi Mai 5","Letio3",9); sv.addElement(k5);
// Dung interface Enumeration de duyet cac phan tu cua Vector java.util.Enumeration enu = sv.elements();
try {
PrintWriter out = new PrintWriter(new FileWriter("C:\\LETI\\JAVA\\Sinhvien.dat")); while (enu.hasMoreElements())
{
// Ep kieu, kieu Object la kieu cha cua moi kieu nen luon ep duoc SinhVien g = (SinhVien)enu.nextElement(); g.GhiData(out); } out.close(); } catch(Exception ep) {} // Doc tu file ra
SinhVien[] svs = new SinhVien[5]; try
{
BufferedReader in = new BufferedReader(new