1.java.io包下
File類:java程序中的此類的一個(gè)對(duì)象阀湿,就對(duì)應(yīng)著硬盤中的一個(gè)文件或網(wǎng)絡(luò)中的一個(gè)資源蚁阳。
File file1 = new File("d:\io\helloworld.txt");
File file2 = new File("d:\io\io1");
1.File既可以表示一個(gè)文件(.doc .xls .mp3 .avi .jpg .dat)深浮,也可以表示一個(gè)文件目錄!
2.File類的對(duì)象是與平臺(tái)無(wú)關(guān)的。
3.File類針對(duì)于文件或文件目錄警绩,只能進(jìn)行新建、刪除盅称、重命名肩祥、上層目錄等等的操作。如果涉及到訪問文件的內(nèi)容缩膝,F(xiàn)ile
是無(wú)能為力的混狠,只能使用IO流下提供的相應(yīng)的輸入輸出流來(lái)實(shí)現(xiàn)。
4.常把File類的對(duì)象作為形參傳遞給相應(yīng)的輸入輸出流的構(gòu)造器中疾层!
2.IO 流的結(jié)構(gòu)
3.IO流的劃分
- 按照流的流向的不同:輸入流 輸出流 (站位于程序的角度)
- 按照流中的數(shù)據(jù)單位的不同:字節(jié)流 字符流 (純文本文件使用字符流 将饺,除此之外使用字節(jié)流)
- 按照流的角色的不同:節(jié)點(diǎn)流 處理流 (流直接作用于文件上是節(jié)點(diǎn)流(4個(gè)),除此之外都是處理流)
4.重點(diǎn)掌握
- 抽象基類 節(jié)點(diǎn)流(文件流) 緩沖流(處理流的一種,可以提升文件操作的效率)
- InputStream
FileInputStream (int read(byte[] b)) BufferedInputStream (int read(byte[] b)) - OutputStream
FileOutputStream (void write(b,0,len)) BufferedOutputStream (flush()) (void write(b,0,len)) - Reader
FileReader (int read(char[] c)) BufferedReader (readLine()) (int read(char[] c))或String readLine() - Writer
FileWriter (void write(c,0,len)) BufferedWriter (flush()) (void write(c,0,len)或void write(String str))
注:
1.從硬盤中讀入一個(gè)文件痛黎,要求此文件一定得存在予弧。若不存在,報(bào)FileNotFoundException的異常
2.從程序中輸出一個(gè)文件到硬盤湖饱,此文件可以不存在掖蛤。若不存在,就創(chuàng)建一個(gè)實(shí)現(xiàn)輸出琉历。若存在坠七,則將已存在的文件覆蓋
3.真正開發(fā)時(shí)水醋,就使用緩沖流來(lái)代替節(jié)點(diǎn)流
4.主要最后要關(guān)閉相應(yīng)的流。先關(guān)閉輸出流彪置,再關(guān)閉輸入流拄踪。將此操作放入finally
5.其它的流
1.轉(zhuǎn)換流:實(shí)現(xiàn)字節(jié)流與字符流之間的轉(zhuǎn)換
InputStreamReader:輸入時(shí),實(shí)現(xiàn)字節(jié)流到字符流的轉(zhuǎn)換拳魁,提高操作的效率(前提是惶桐,數(shù)據(jù)是文本文件) ===>解碼:字節(jié)數(shù)組--->字符串
OutputStreamWriter:輸出時(shí),實(shí)現(xiàn)字符流到字節(jié)流的轉(zhuǎn)換潘懊。 ===>編碼: 字符串---->字節(jié)數(shù)組
例子:從鍵盤輸入字符串姚糊,要求將讀取到的整行字符串轉(zhuǎn)成大寫輸出。然后繼續(xù)進(jìn)行輸入操作授舟,直至當(dāng)輸入“e”或者“exit”時(shí)救恨,退出程序。
2.標(biāo)準(zhǔn)的輸入輸出流
System.in: The "standard" input stream:從鍵盤輸入數(shù)據(jù)
System.out:The "standard" output stream:從顯示器輸出數(shù)據(jù)
3.打印流 (都是輸出流) PrintStream(處理字節(jié)) PrintWriter(處理字符)
可以使用System.setOut(PrintStream p)重新設(shè)置一下輸出的位置释树。
PrintStream p = new PrintStream(new FileOutputStream("hello.txt"),true);
4.數(shù)據(jù)流(處理基本數(shù)據(jù)類型肠槽、String類、字節(jié)數(shù)組)
DataInputStream DataOutputStream
5.對(duì)象流(用來(lái)處理對(duì)象的)
對(duì)象的序列化機(jī)制:允許把內(nèi)存中的Java對(duì)象轉(zhuǎn)換成平臺(tái)無(wú)關(guān)的二進(jìn)制流奢啥,從而允許把這種二進(jìn)制流持久地保存在磁盤上秸仙,或通過(guò)網(wǎng)絡(luò)將這種二進(jìn)制流傳輸?shù)搅硪粋€(gè)網(wǎng)絡(luò)節(jié)點(diǎn)。當(dāng)其它程序獲取了這種二進(jìn)制流桩盲,就可以恢復(fù)成原來(lái)的Java對(duì)象
ObjectInputStream(Object readObject();) ObjectOutputStream (void writeObject(Object obj))
如何創(chuàng)建流的對(duì)象:ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("person.txt")));
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("person.txt")));
實(shí)現(xiàn)序列化機(jī)制的對(duì)象對(duì)應(yīng)的類的要求:
①要求類要實(shí)現(xiàn)Serializable接口
②同樣要求類的所有屬性也必須實(shí)現(xiàn)Serializable接口
③ 要求給類提供一個(gè)序列版本號(hào):private static final long serialVersionUID;
④屬性聲明為static 或transient的寂纪,不可以實(shí)現(xiàn)序列化
6.隨機(jī)存取文件流:RandomAccessFile
6.1既可以充當(dāng)一個(gè)輸入流,又可以充當(dāng)一個(gè)輸出流:public RandomAccessFile(File file, String mode)
6.2支持從文件的開頭讀取赌结、寫入捞蛋。若輸出的文件不存在,直接創(chuàng)建姑曙。若存在襟交,則是對(duì)原有文件內(nèi)容的覆蓋。
6.3 支持任意位置的“插入”伤靠。