版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京傳智播客教育 Java 預(yù)熱班講義講師:屈博File類File類代表與平臺(tái)無(wú)關(guān)的文件和目錄,也就是說(shuō)如果希望在程序中操作文件和目錄,都可以通過(guò)File類來(lái)完成。值得指出的是,不管是文件還是目錄都是使用File類操作的,F(xiàn)ile能新建、刪除、重命名文件和目錄,F(xiàn)ile不能訪問(wèn)文件內(nèi)容本身,如果需要訪問(wèn)文件內(nèi)容本身,則需要使用輸入/輸出流完成。北京傳智播客教育 File類方法1、訪問(wèn)文件名相關(guān)方法:String getName(); 返回此file對(duì)象所表示的文件名或路徑名String getPath(); 返回此File對(duì)象所對(duì)應(yīng)的路徑名File getAbsoluteFile(); 返回此
2、File對(duì)象所對(duì)應(yīng)的的絕對(duì)路徑所對(duì)應(yīng)的File對(duì)象。String getAbsolutePath(); 返回此File對(duì)象所對(duì)應(yīng)的絕對(duì)路徑名boolean renameTo(File name); 重命名此File對(duì)象所對(duì)應(yīng)的文件或目錄,如果重命名成功,返回true,否則返回false。File類方法2、文件檢測(cè)相關(guān)方法:boolean exists(); 判斷文件或目錄是否存在boolean canWriter(); 判斷文件和目錄是否可寫boolean canReader(); 判斷文件和目錄是否可讀boolean isFile(); 判斷是否是文件,而不是目錄boolean isDire
3、ctory(); 平時(shí)是否目錄,而不是文件boolean isAbsolute(); 判斷是否是絕對(duì)路徑3、獲取常規(guī)文件信息long lastModified(); 返回文件最后修改時(shí)間long length(); 返回文件內(nèi)容的長(zhǎng)度File類方法4、文件操作相關(guān)的方法boolean createNewFile(); 對(duì)應(yīng)的文件不存在時(shí),該方法將新建一個(gè)該File對(duì)象所指定的新文件,如果存在返回true,否則返回falseboolean delete(); 刪除File對(duì)象對(duì)應(yīng)的文件或路徑static File createTempFile(String prerix, String suff
4、ix); 在默認(rèn)的臨時(shí)文件目錄中常見一個(gè)臨時(shí)的空文件,使用給定的前綴和系統(tǒng)生成的隨機(jī)數(shù)以及給定后綴作為文件名。static File createTempFile(String prerix, String suffix File directory); 在directory所指的目錄中創(chuàng)建一個(gè)臨時(shí)文件void deleteOnExit(); 注冊(cè)一個(gè)刪除鉤子,指定到那個(gè)Java虛擬機(jī)退出時(shí),刪除File對(duì)象所對(duì)應(yīng)的文件和目錄File類方法5、目錄操作相關(guān)的方法boolean mkdir(); 試圖創(chuàng)建一個(gè)File對(duì)象所對(duì)應(yīng)的目錄,如果成功返回true,否則返回false,調(diào)用該方法的File
5、對(duì)象必須是一個(gè)路徑,而不是文件。String list(); 列出File對(duì)象的素有子文件名和路徑名File listFiles(); 列出File對(duì)象所有子文件和路static File listRoots(); 列出系統(tǒng)所有的根路徑文件過(guò)濾在Flie類list方法中可以接受一個(gè)FilenameFilter參數(shù),通過(guò)該參數(shù)可以只列出符合條件的文件。FilenameFilter接口里包含一個(gè)accept(File dir,String name)方法,該方法將依次對(duì)指定File的所有子目錄或者文件進(jìn)行迭代,如果該方法返回true,則list()方法會(huì)列出該子目錄或者文件。北京傳智播客教育 遞歸
6、函數(shù)直接或者間接的調(diào)用自己。注意:遞歸時(shí)一定要明確結(jié)束條件和遞歸次數(shù)(防止棧內(nèi)存溢出)。應(yīng)用場(chǎng)景:當(dāng)某一功能要重復(fù)使用時(shí)。練習(xí):列出一個(gè)文件夾下所有的子文件夾以及子文件思考:刪除一個(gè)目錄的過(guò)程是如何進(jìn)行的?練習(xí)刪除一個(gè)帶有內(nèi)容的目錄。輸入/輸出流體系分類字節(jié)輸入流字節(jié)輸出流字符輸入流字符輸出流抽象基類InputStreamOutputStreamReaderWriter訪問(wèn)文件FileInputStreamFileOutPutStreamFileReaderFileWriter訪問(wèn)數(shù)組ByteArrayInputStreamByteArrayOutputStreamCharArrayReade
7、rCharArrayWriter訪問(wèn)管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter訪問(wèn)字符串StringReaderStringWriter緩沖區(qū)BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter轉(zhuǎn)換流InputStreamReaderOutputStreamWriter對(duì)象流ObjectInputStreamObjectOutputStream抽象基類FilterInputstreamFilterOutputStreamFilterReade
8、rFilterWriter打印流PrintStreamPrintWriter推回流PushbackInputStreamPushbackReader特殊流DateInputStreamDateOutputStreamIO(Input Output)輸入、輸出流Java的IO通過(guò)java.io包下的類和接口來(lái)支持,在java.io包下主要包含輸入、輸出兩種IO流,每種輸入、輸出流又可分為字節(jié)流和字符流兩大類。其中字節(jié)流以字節(jié)為單位來(lái)處理輸入、輸出操作。而字符流則以字符來(lái)處理輸入、輸出操作。按照流向來(lái)分,可以將流分為輸入和輸出流。輸入流:只能從中讀取數(shù)據(jù),而不能向其寫入數(shù)據(jù)。輸出流:只能向其寫入數(shù)
9、據(jù),而不能從中讀取數(shù)據(jù)。北京傳智播客教育 IO(Input Output)輸入、輸出流按操作數(shù)據(jù)分為兩種:字節(jié)流與字符流。字節(jié)流和字符流的用法幾乎完全一樣,區(qū)別在于字節(jié)流和字符流所操作的數(shù)據(jù)單元不同字節(jié)流操作的是數(shù)據(jù)單元是8位的字節(jié),而字符流操作的數(shù)據(jù)單元是16位的字符,為了處理文字?jǐn)?shù)據(jù)方便而出現(xiàn)的對(duì)象,簡(jiǎn)單說(shuō):字符流就是 : 字節(jié)流+編碼表。北京傳智播客教育 IO流常用基類字節(jié)流的抽象基類:InputStream ,OutputStream。字符流的抽象基類:Reader , Writer。注:由這四個(gè)類派生出來(lái)的子類名稱都是以其父類名作為子類名的后綴。如:InputStream的子類Fil
10、eInputStream。如:Reader的子類FileReader。北京傳智播客教育 IO程序的書寫導(dǎo)入IO包中的類進(jìn)行IO異常處理在finally中對(duì)流進(jìn)行關(guān)閉思考:有了垃圾回收機(jī)制為什么還要調(diào)用close方法進(jìn)行關(guān)閉。為什么IO異常一定要處理。例程北京傳智播客教育 字符流創(chuàng)建文件(FileWriter)創(chuàng)建流對(duì)象,建立數(shù)據(jù)存放文件FileWriter fw = new FileWriter(“Test.txt”);調(diào)用流對(duì)象的寫入方法,將數(shù)據(jù)寫入流fw.write(“text”);關(guān)閉流資源,并將流中的數(shù)據(jù)清空到文件中。fw.close();不寫close方法會(huì)有什么結(jié)果呢?如果想在原有
11、文件上繼續(xù)加入新的數(shù)據(jù)呢?北京傳智播客教育 完整代碼FileWriter fw = null;tryfw = new FileWriter(Test.txt);fw.write(text);catch (IOException e)System.out.println(e.toString();finallyIf(fw!=null)tryfw.close();catch (IOException e)System.out.println(e.toString();北京傳智播客教育 字符流讀取文件(FileReader)建立一個(gè)流對(duì)象,和指定的文件數(shù)據(jù)關(guān)聯(lián)。FileReader fr = new
12、 FileReader(“Test.txt”);創(chuàng)建一個(gè)臨時(shí)存放數(shù)據(jù)的數(shù)組。char ch = new char1024;調(diào)用流對(duì)象的讀取方法將流中的數(shù)據(jù)讀入到數(shù)組中。fr.read(ch);思考:在加載文件時(shí)候是否是將文件全部加載進(jìn)流為什么定義數(shù)組,要定義多大呢?北京傳智播客教育 完整代碼FileReader fr = null;tryfr = new FileReader(c:test.txt);char buf = new char1024;int len= 0;while(len=fr.read(buf)!=-1)System.out.println(new String(buf,0,
13、len);catch (IOException e)System.out.println(read-Exception :+e.toString();finallyif(fr!=null)tryfr.close();catch (IOException e)System.out.println(close-Exception :+e.toString();北京傳智播客教育 練習(xí)復(fù)制文本文件定義文件路徑時(shí),可以用“/”或者“”。在創(chuàng)建一個(gè)文件時(shí),如果目錄下有同名文件將被覆蓋。在讀取文件時(shí),必須保證該文件已存在,否則出異常。練習(xí):Copy一個(gè)文本文件。北京傳智播客教育 字符流的緩沖區(qū)緩沖區(qū)的出現(xiàn)提
14、高了對(duì)數(shù)據(jù)的讀寫效率。對(duì)應(yīng)類BufferedWriterBufferedReader緩沖區(qū)要結(jié)合流才可以使用。在流的基礎(chǔ)上對(duì)流的功能進(jìn)行了增強(qiáng)。BufferedWriter字符緩沖區(qū),它用于提高寫的效率,需要和指定的輸出流對(duì)象關(guān)聯(lián)。字符緩沖區(qū),擁有自己獨(dú)特方法newLine(),目的是獲取系統(tǒng)默認(rèn)的換行符進(jìn)行換行。字符緩沖區(qū)不能單獨(dú)存在,必須建立流的基礎(chǔ)上。BufferedReader從字符輸入流中讀取文本,緩沖各個(gè)字符,從而實(shí)現(xiàn)字符、數(shù)組和行的高效讀取??梢灾付ň彌_區(qū)的大小,或者可使用默認(rèn)的大小。大多數(shù)情況下,默認(rèn)值就足夠大了。字符緩沖區(qū)讀取(輸入)流,同樣需要建立在讀取(輸入)流的基礎(chǔ)上,
15、不能單獨(dú)存在。特有方法:readerLine();從緩沖區(qū)讀取數(shù)據(jù),進(jìn)行臨時(shí)存儲(chǔ),直到讀取到換行,將讀取到的數(shù)據(jù)轉(zhuǎn)成字符串返回。北京傳智播客教育 裝飾設(shè)計(jì)模式對(duì)原有類進(jìn)行了功能的改變,增強(qiáng)。裝飾模式的基本格式。它與繼承有什么不同?了解BufferedReader的原理。練習(xí):模擬一個(gè)BufferedReader類。模擬一個(gè)LineNumberReader類。練習(xí)通過(guò)緩沖區(qū)實(shí)現(xiàn)文本文件的copy北京傳智播客教育 字節(jié)流基本操作與字符流類相同字節(jié)流的基類:InputStream 字節(jié)輸入流OutputStream 字節(jié)輸出流但它不僅可以操作字符,還可以操作其他媒體文件例程Copy一個(gè)Jpg文件。北
16、京傳智播客教育 字節(jié)流的緩沖區(qū)同樣是提高了字節(jié)流的讀寫效率。練習(xí):通過(guò)幾種方式對(duì)MP3的進(jìn)行拷貝,比較它們的效率。模擬一個(gè)BufferedInputStream讀取鍵盤錄入通過(guò)System.in可以獲取“標(biāo)準(zhǔn)”輸入流。InputStream in = System.in;int ch1 = in.read();北京傳智播客教育 轉(zhuǎn)換流輸入/輸出流體系中提供了兩個(gè)轉(zhuǎn)換流,這兩個(gè)轉(zhuǎn)換流用于實(shí)現(xiàn)將字節(jié)流轉(zhuǎn)換成字符流,其中InputStreamReader將字節(jié)輸入流轉(zhuǎn)換成字符輸入流,OutputStreamWriter將字節(jié)輸出流轉(zhuǎn)成字符輸出流。轉(zhuǎn)換流的應(yīng)用字節(jié)流中的數(shù)據(jù)都是字符時(shí),轉(zhuǎn)成字符流操作更
17、高效。例程:標(biāo)準(zhǔn)輸入輸出。北京傳智播客教育 標(biāo)準(zhǔn)輸入輸出流System類中的字段:in,out。它們各代表了系統(tǒng)標(biāo)準(zhǔn)的輸入和輸出設(shè)備。默認(rèn)輸入設(shè)備是鍵盤,輸出設(shè)備是顯示器。System.in的類型是InputStream.System.out的類型是PrintStream是OutputStream的子類FilterOutputStream 的子類.北京傳智播客教育 標(biāo)準(zhǔn)輸入輸出流示例例:獲取鍵盤錄入數(shù)據(jù),然后將數(shù)據(jù)流向顯示器,那么顯示器就是目的地。通過(guò)System類的setIn,setOut方法對(duì)默認(rèn)設(shè)備進(jìn)行改變。System.setIn(new FileInputStream(“1.txt”
18、);/將源改成文件1.txt。System.setOut(new PrintStream(“2.txt”);/將目的改成文件2.txt因?yàn)槭亲止?jié)流處理的是文本數(shù)據(jù),可以轉(zhuǎn)換成字符流,操作更方便。BfferedReader bufr = new BufferedReader(new InputStreamReader(System.in);BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out);北京傳智播客教育 流的基本應(yīng)用小節(jié)流是用來(lái)處理數(shù)據(jù)的。處理數(shù)據(jù)時(shí),一定要先明確數(shù)據(jù)源,與數(shù)據(jù)目的地(數(shù)據(jù)匯)
19、。數(shù)據(jù)源可以是文件,可以是鍵盤。數(shù)據(jù)目的地可以是文件、顯示器或者其他設(shè)備。而流只是在幫助數(shù)據(jù)進(jìn)行傳輸,并對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行處理,比如過(guò)濾處理.轉(zhuǎn)換處理等。IO練習(xí)總結(jié)復(fù)制一個(gè)文本文件1、明確體系:源:InputStream ,Reader 目的:OutputStream ,Writer2、明確數(shù)據(jù):源:是純文本嗎?是 Reader 目的;是純文本嗎?是 Writer3、明確設(shè)備:源:硬盤上的一個(gè)文件FileReader 目的:硬盤上的一個(gè)文件。FileWriter4、需要額外功能嗎?需要,高效,使用buffer北京傳智播客教育 字符流繼承體系簡(jiǎn)圖字符流ReaderWriterInputStrea
20、mReaderOutputStreamWriterFileReaderFileWriterBufferedReaderBufferedWriter北京傳智播客教育 字節(jié)流繼承體系簡(jiǎn)圖FileInputStream字節(jié)流FilterInputStreamFilterOutputStreamBufferedInputStreamBufferedOutputStreamInputStreamOutputStreamFileOutputStream功能流IO包中還有一些具有特殊功能的流對(duì)象,這些流都是用來(lái)解決特定問(wèn)題,在學(xué)習(xí)時(shí),只要記住它們彼此的特定功能就可以。打印流(PrintStream)Prin
21、tStream:字節(jié)打印流。特點(diǎn):1、構(gòu)造函數(shù)接收File對(duì)象,字符串路徑,字節(jié)輸出流。意味著打印目的可以有很多。2、該對(duì)象具備特有的方法打印方法 print和println,可以打印任何類型的數(shù)據(jù)。3、特有的print方法可以保持任意類型數(shù)據(jù)表現(xiàn)形式的原樣性,將數(shù)據(jù)輸出到目的地。對(duì)于OutputStream父類中的write,是將數(shù)據(jù)的最低字節(jié)寫出去。PriteStream演示打印流(PrintWriter)PrintWriter字符打印流.特點(diǎn):1、當(dāng)操作的數(shù)據(jù)是字符時(shí),可以選擇PrintWriter,比PrintStream要方便。2、它的構(gòu)造函數(shù)可以接收 File對(duì)象,字符串路徑,字節(jié)
22、輸出流,字符輸出流。3、構(gòu)造函數(shù)中,如果參數(shù)是輸出流,那么可以通過(guò)指定另一個(gè)參數(shù)true完成自動(dòng)刷新,該true對(duì)println方法有效。PrinteWrite演示標(biāo)準(zhǔn)的輸入、輸出流不需要關(guān)閉,一旦關(guān)閉了,程序后面將無(wú)法獲取到此流。標(biāo)準(zhǔn)輸入、輸出流在程序啟動(dòng)的時(shí)候兩個(gè)流對(duì)象就創(chuàng)建了。SequenceInputStream序列流特點(diǎn):1,將多個(gè)字節(jié)讀取流和并成一個(gè)讀取流,將多個(gè)源合并成一個(gè)源,操作起來(lái)方便。2,創(chuàng)建對(duì)象時(shí),需要明確多個(gè)流。3,需要的枚舉接口可以通過(guò)Collections.enumeration(collection);練習(xí):文件分割程序。SequenceInputStream序列
23、流操作對(duì)象的流操作對(duì)象ObjectInputStream與ObjectOutputStream被操作的對(duì)象需要實(shí)現(xiàn)Serializable (標(biāo)記接口);靜態(tài)數(shù)據(jù)不會(huì)被序列化。transient 可以讓非靜態(tài)的數(shù)據(jù)不被序列化若某個(gè)類的對(duì)象需要序列化,就需要實(shí)現(xiàn)Serializable標(biāo)記接口,該接口給需要序列化的類,提供了一個(gè)序列版本號(hào)serialVersionUID,該版本號(hào)的目的在于驗(yàn)證序列化的對(duì)象和對(duì)應(yīng)類是否版本匹配。對(duì)象的序列化對(duì)象的序列化時(shí)的問(wèn)題java.io.NotSerializableException:發(fā)生此異常的主要原因是要被序列化的對(duì)象所屬的類未實(shí)現(xiàn)java.io.Ser
24、ializable 接口對(duì)象的反序列化序列化需要注意的問(wèn)題在進(jìn)行序列化時(shí),一般被序列化的對(duì)象所屬的類不僅要實(shí)現(xiàn)java.io.Serializable 接口,還在類中聲明名為 serialVersionUID 的字段(該字段必須是靜態(tài) (static)、最終 (final) 的 long 型字段)顯式聲明其自己的 serialVersionUID:RandomAccessFile類此類的實(shí)例支持對(duì)隨機(jī)訪問(wèn)文件的讀取和寫入創(chuàng)建RandomAccessFile對(duì)象時(shí),如果文件不存在則創(chuàng)建。若存在則不創(chuàng)建也不會(huì)發(fā)生覆蓋特點(diǎn):1,即可讀取,又可以寫入。2,內(nèi)部維護(hù)了一個(gè)大型的byte數(shù)組,通過(guò)對(duì)數(shù)組的操作完成讀取和寫入。3,通過(guò)getFilePointer方法獲取指針的位置,還可以通過(guò)seek方法設(shè)置指針的位置。4,該對(duì)象的內(nèi)容應(yīng)該封裝了字節(jié)輸入流和字節(jié)輸出流。5,該對(duì)象只能操作文件。6,只能操作(讀寫)具有規(guī)律的文件數(shù)據(jù)。通過(guò)seek方法操作指針,可以從這個(gè)數(shù)組中的任意位置上進(jìn)行讀和寫可以完成對(duì)數(shù)據(jù)的修改。但是要注意:數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度安全生產(chǎn)應(yīng)急預(yù)案編制與演練服務(wù)合同
- 會(huì)計(jì)審計(jì)服務(wù)合同
- 綠色能源項(xiàng)目股權(quán)轉(zhuǎn)讓合同
- 游戲設(shè)備銷售與安裝合同
- 道路交通賠償合同
- 2024合同補(bǔ)充協(xié)議范本
- 雙t板運(yùn)輸合同范本
- 2025藝術(shù)品購(gòu)買合同范本
- 2025民營(yíng)企業(yè)勞動(dòng)合同書范本
- 2024年版的個(gè)人對(duì)公司借款合同
- 2024年國(guó)網(wǎng)公司企業(yè)文化與職業(yè)道德試考試題庫(kù)(含答案)
- 房地產(chǎn)中介公司業(yè)務(wù)管理制度
- 電大《生產(chǎn)與運(yùn)作管理》2023-2024期末試題及答案(試卷代號(hào)2617)
- 中國(guó)腫瘤藥物治療相關(guān)惡心嘔吐防治專家共識(shí)(2022年版)解讀
- PLC應(yīng)用技術(shù)(三菱機(jī)型)三菱大中型PLC
- GB 21258-2024燃煤發(fā)電機(jī)組單位產(chǎn)品能源消耗限額
- 《用戶體驗(yàn)設(shè)計(jì)導(dǎo)論》
- 美團(tuán)外賣運(yùn)營(yíng)知識(shí)試題
- 航空概論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 業(yè)務(wù)流程可視化改善
- 期末復(fù)(知識(shí)清單)2024-2025學(xué)年人教PEP版(2024)英語(yǔ)三年級(jí)上冊(cè)
評(píng)論
0/150
提交評(píng)論