JAVA編程高級-文件與流_第1頁
JAVA編程高級-文件與流_第2頁
JAVA編程高級-文件與流_第3頁
JAVA編程高級-文件與流_第4頁
JAVA編程高級-文件與流_第5頁
已閱讀5頁,還剩85頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

精選文庫JAVA編程高級 文件與流3 Sept. 2008- Neusoft Confidential1文件與流目標:Java文件管理及File類的使用。流的概念及API。節(jié)點流與處理流的使用。對象序列化。對象序列化有關(guān)的接口和類。序列化對象的應用。教學方法:講授ppt上機練習本章要點文件管理File類的使用與文件操作流的概念及API流的概念節(jié)點流與處理流的使用節(jié)點流處理流對象的序列化序列化transient關(guān)鍵字文件管理Java中對文件的管理是通過java.io包中的File類實現(xiàn)的JJava中對文件的管理主要是針對文件或是目錄路徑名的管理文件管理包括 創(chuàng)建文件、目錄, 查看文件和目錄是否存在, 查看目錄內(nèi)的文件列表, 查看文件和目錄的屬性(讀寫、隱藏等), 對文件和目錄名改名和刪除。File對象可以表示某個文件的名字,也可以表示一個目錄的名字。File對象不直接提供查看文件內(nèi)容的方法,文件內(nèi)容的操作是通過I/O流來訪問的。4File對象的創(chuàng)建文件對象的創(chuàng)建是通過File類的構(gòu)造器來實例化的File類構(gòu)造方法: public File(String pathname)File f1 = new File(“c:tempabc.txt”);File f2 = new File(“abc.txt”);說明:1、字符串中使用的”符號屬于轉(zhuǎn)義字符,在字符串中要使用真正的”符號,需要連續(xù)輸入兩個”。2、如果pathname是相對路徑,則默認的當前路徑在系統(tǒng)屬性user.dir中存儲,通過System.getProperty( user.dir )方法可以取得默認的當前路徑。3、該方法不是在硬盤上創(chuàng)建一個文件,而是在內(nèi)存里創(chuàng)建一個File對象。4、File對象只是創(chuàng)建了文件的引用,對象定義后,只是提供了后續(xù)通過該對象的引用,來對指定的文件進行相關(guān)操作。5File對象的創(chuàng)建 public File(String parent, String child)創(chuàng)建一個以child命名的文件對象,該對象存在于parent命名的路徑下。File f = new File(“c:temp”,”test.text”); File(File parent, String child)創(chuàng)建一個以child命名的文件對象,該對象存在于parent的文件對象所引用的路徑下。File f = new File(“c:tempnew”);File f1 = new File(f,”test.text”);6File對象的方法boolean canRead() 測試應用程序是否可以讀取此抽象路徑名表示的文件。boolean canWrite() 測試應用程序是否可以修改此抽象路徑名表示的文件。boolean createNewFile() 創(chuàng)建新的空文件。String getName() 返回路徑字符串中尾部部分的名字,不包括路徑。String getParent() 返回File對象的父目錄名String getPath() 返回路徑名7File對象的方法(續(xù))boolean delete()刪除文件或目錄,刪除目錄的時候,只有目錄下沒有任何內(nèi)容,才能被刪除。boolean exists()測試此抽象路徑名表示的文件或目錄是否存在。String getAbsolutePath()返回抽象路徑名的絕對路徑名字符串。long length()返回由此抽象路徑名表示的文件的大小,以byte為單位。boolean renameTo(File dest)重新命名此抽象路徑名表示的文件。8File對象的方法(續(xù))boolean isAbsolute()測試此抽象路徑名是否為絕對路徑名boolean isDirectoryy()測試此抽象路徑名表示的文件是否是一個目錄。boolean isFile()測試此抽象路徑名表示的文件是否是一個標準文件boolean isHidden()測試此抽象路徑名指定的文件是否是一個隱藏文件。9File對象的方法(續(xù))String list()返回由此抽象路徑名所表示的目錄中的文件和目錄的名稱所組成字符串數(shù)組。File listFiles()返回一個抽象路徑名數(shù)組,這些路徑名表示此抽象路徑名所表示目錄中的文件。boolean mkdir()創(chuàng)建此抽象路徑名指定的目錄,需要該目錄的父目錄物理上存在。boolean mkdirs() :創(chuàng)建此抽象路徑名指定的目錄,包括創(chuàng)建必需但不存在的父目錄示例FileDemo.java10文件管理 練習FileExercise.java在本機的磁盤系統(tǒng)中,找一個文件夾,利用File類的提供方法,列出該文件夾中的所有文件的文件名和文件的路徑。路徑是xxx的文件夾內(nèi)的文件有:文件名:abc.txt路徑名:c:tempabc.txt-文件名:def.txt路徑名:c:tempdef.txt11流 在Java程序中,對于文件內(nèi)容的存取,即對于數(shù)據(jù)的輸入、輸出操作,以“流”的方式進行的。 流(Stream)像一個通道,通道內(nèi)流動著數(shù)據(jù),通道兩端連接著數(shù)據(jù)的來源和目的地。數(shù)據(jù)來源(source)數(shù)據(jù)目的地(sink)輸入流輸出流程序程序12流的分類jdk提供了各種各樣的“流”類,用以獲取不同種類的數(shù)據(jù)。java.ioio包中定義了多個流類型來實現(xiàn)輸入、輸出功能,可以從多個角度對其分類: 按數(shù)據(jù)流的方向:輸入流、輸出流 按處理數(shù)據(jù)單位:字節(jié)流、字符流 按功能:節(jié)點流、處理流節(jié)點流:可以從數(shù)據(jù)源(節(jié)點)讀寫數(shù)據(jù)處理流:套接在已存在的流(節(jié)點流、處理流)之上,通過對數(shù)據(jù)的處理,為程序提供更為強大的讀寫功能。13流的分類JDK所提供的所有流類型位于java.io包內(nèi),它有兩大繼承體系: 一個是以byte處理為主的Stream類,他們的命名方式都是以XXXXStream; 另一個繼承體系是以字符處理為主的Reader/Writer類,他們的命名方式都是以XXXXReader或XXXXWriter。InputStream(字節(jié)輸入流)、OutputStream (字節(jié)輸出流)、Reader(字符輸入流)、Writer (字符輸出流)這四個類,正是這兩大繼承體系的父類。14InputStream繼承自InputStream的流都用于向程序輸入數(shù)據(jù),且處理數(shù)據(jù)的單位為字節(jié)。15InputStream類int read() 一次讀取一個字節(jié)的數(shù)據(jù),以int類型把數(shù)據(jù)返回來,如果沒有數(shù)據(jù)可讀了,會返回”-1”。int read(byte b) 把所讀取到的數(shù)據(jù)放在byte數(shù)組中,返回實際讀取的字節(jié)數(shù)。void close() 關(guān)閉輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。int available() 獲取這個流中還有多少個byte的數(shù)據(jù)可以讀取。16FileInputStreamFileInputStream直接繼承于InputStream,用于從文件系統(tǒng)中的某個文件中獲得輸入字節(jié)。兩種方式產(chǎn)生FIleInputStream對象: 產(chǎn)生一個File對象,然后當作FileInputStream類構(gòu)造函數(shù)的參數(shù);File f = new File(“c:tempabc.txt”);FileInputStream fin = new FileInputStream(f); 直接給構(gòu)造函數(shù)一個字符串,也就是文件的名稱。FileInputStream fin = new FileInputStream(“c:tempabc.txt”);示例FileInputStream.java17FileInputStream練習編寫程序,從命令行輸入要顯示的文件,并顯示該文件的內(nèi)容。18OutputStream繼承自O(shè)utputStream的流是用于從程序向外界輸出數(shù)據(jù),且處理數(shù)據(jù)的單位為字節(jié)。19OutputStream類void write(int b)向輸出流中寫入一個字節(jié)的數(shù)據(jù)。void write(byte b)將一個字節(jié)型數(shù)組中的數(shù)據(jù)寫入輸出流。void close()關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。void flush()刷新此輸出流并強制寫出所有緩沖的輸出字節(jié)。20FileOutputStreamFileOutputStream類用于將數(shù)據(jù)寫入File,以字節(jié)為單位。FileOutputStream構(gòu)造函數(shù) FileOutputStream (File file)創(chuàng)建一個向指定File 對象表示的文件中寫入數(shù)據(jù)的文件輸出流 FileOutputStream (String name)創(chuàng)建一個向具有指定名稱的文件中寫入數(shù)據(jù)的輸出文件流 FileOutputStream (String name, boolean append) 創(chuàng)建一個向具有指定 name 的文件中寫入數(shù)據(jù)的輸出文件流。 第二個參數(shù),true:表示寫入的數(shù)據(jù)會附加到原來文件的后面。 示例: FileOutputStream.java21練習編寫一個程序,要求將字符串”abcd”寫入d:ioc.txt文件的尾部,如果寫入成功則提示“寫入成功”。22ReaderReader是輸入字符數(shù)據(jù)用的類,它所提供的方法和InputStream類一樣,差別在于InputStream類中用的是byte類型,而Reader類中用的是字符類型。Reader類中沒有available方法,取而代之的是”ready”方法,這個方法會去檢查Reader對象是否已經(jīng)準備好輸入數(shù)據(jù)了,如果是返回true,反之返回false。23Reader24Readerint read() 一次讀取一個char的數(shù)據(jù),以int類型把數(shù)據(jù)返回來,如果沒有數(shù)據(jù)可讀了,會返回”-1”。int read(char b) 把所讀取到的數(shù)據(jù)放在char數(shù)組中,返回實際讀取的char數(shù)。void close() 關(guān)閉輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源。boolean ready() 判斷是否準備讀取此流,如果下一個 read() 可輸入,則返回 true,否則返回 false 。25FileReaderFileReader 用于讀取字符流,最好是以字符為單位來訪問字符數(shù)據(jù),這樣才不會有文字處理上的問題。示例: FileReader.java26Writer類Writer類是輸出字符數(shù)據(jù)的類,提供的方法和OutputStream類中的方法類似,將OutputStream類中用到的byte類型,換成char類型。BufferedWriterCharArrayWriterPipedWriterWriterOutputStreamWriterFileWriterStringWriterPrintWriterFilterWriter27Writer類void write(int b) 將指定的字符寫入到輸出流中。void write(char b) 將一個字符型數(shù)組中的數(shù)據(jù)寫入輸出流。void write(String s) 將一個字符串中的數(shù)據(jù)寫入輸出流。void close() 關(guān)閉此輸出流并釋放與此流有關(guān)的所有系統(tǒng)資源。void flush() 刷新此輸出流并強制寫出所有緩沖的輸出字符。28FileWriterFileWriter 用于寫入字符流示例: FileWriter.java29節(jié)點流節(jié)點流:從一個特定的數(shù)據(jù)源(節(jié)點)讀寫數(shù)據(jù)(如:文件、內(nèi)存)的流。30類型字節(jié)流字符流文件(File)FileInputStreamFileOutputStreampFileReaderFileWriter內(nèi)存(數(shù)組)ByteArrayInputStreamByteOutputArrayStreamCharArrayReaderCharArrayWriter內(nèi)存(字符串)StringReaderStringWriter管道(Pipe)PipedInputStreamPipedOutputStreamp pPipedReaderPipedWriterp處理流只用字節(jié)或是字符為單位來對數(shù)據(jù)做輸入輸出是不夠的,有時候我們需要一行一行的讀數(shù)據(jù),有時我們需要讀取特定格式的數(shù)據(jù),因此Java提供了這樣的機制,能把數(shù)據(jù)流作連接(chain),讓原本沒有特殊訪問方法的流,通過連接到特殊的流后,變成可以用特定的方法來訪問數(shù)據(jù)。連接在已存在的流(節(jié)點流、處理流)之上,通過對數(shù)據(jù)的處理,為程序提供更為強大的讀寫功能。處理流類的構(gòu)造函數(shù)中,都必須接收另外一個流對象作為參數(shù)31處理流處理流類型32處理類型字節(jié)流字符流緩沖BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter字符和字節(jié)轉(zhuǎn)換InputStreamReaderOutputStreamWriter對象序列化ObjectInputStreamObjObjectOutputStreamtO t tSt數(shù)據(jù)流DataInputStreamDataOutputStream計數(shù)LineNumberInputStreamLineNumberReader重復PushbackInputStreamPushbackReader打印PrintStreamPrintWriter緩沖流緩沖流對讀寫的數(shù)據(jù)提供了緩沖的功能,它套接在相應的節(jié)點流之上,對讀寫的數(shù)據(jù)提供了緩沖的功能,提高了讀寫的效率,同時增加了一些新的方法。Java提供了四種緩沖流,其常用的構(gòu)造方法為: BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size) BufferedOutputStream(OutputStream out) BufferedOutputStream(OutputStream out , int size) BufferedReader(Reader in) BufferedReader(Reader in, int sz) BufferedWriter(Writer out) BufferedWriter(Writer out, int sz)33緩沖流緩沖流中的方法: BufferedInputStream支持其父類的mark和reset方法 BufferedReader提供了readLine方法用于讀取一行字符串 BufferedWriter提供了newLine方法用于寫入一個行分隔符 對于BufferedWriter和BufferedOutputStream,寫出的數(shù)據(jù)會先在內(nèi)存中緩存,使用flush方法將內(nèi)存中的數(shù)據(jù)立刻寫出。示例: BufferedInputStream.java 、BufferedWriter.java34數(shù)據(jù)流數(shù)據(jù)流提供了可以讀寫各種基本數(shù)據(jù)類型的方法DataInputStream和DataOutputStream分別繼承自InputStream和OutputStream,屬于處理流,需要分別套接在InputStream和OutputStream 上構(gòu)造方法: DataInputStream(InputStream in) DataOutputStream(OutputStream out) 示例: DataOutputStream.java35轉(zhuǎn)換流InputStreamReader和OutputStreamWriter用于字節(jié)數(shù)據(jù)到字符數(shù)據(jù)之間的轉(zhuǎn)換InputStreamReader需要和InputStream套接OutputStreamWriter需要和OutputStream套接轉(zhuǎn)換流在構(gòu)造時,可以指定其編碼集合InputStreamReader is = new InputStreamReader(System.in,”GB2312”);示例: InputStreamReader.java36標準I/O設(shè)備操作計算機都有輸入和輸出設(shè)備,最常見的輸入設(shè)備是鍵盤,用戶可以從鍵盤向程序輸入數(shù)據(jù);而最常見的輸出設(shè)備是屏幕,可以把程序的運行結(jié)果顯示到屏幕上。鍵盤是默認的標準輸入設(shè)備,而屏幕是標準的輸出設(shè)備Java.lang.System類提供了三個成員變量(輸入/輸出流)來執(zhí)行標準的I/O操作 in out37System.in輸入流提供了從標準輸入設(shè)備讀入數(shù)據(jù)的功能in是System類中的一個static final的InputStream類型變量默認情況下,in關(guān)聯(lián)到的標準輸入設(shè)備是鍵盤可以通過System類的setInt方法來改變默認的標準輸入流38System.out輸出流提供了向標準輸出設(shè)備寫出數(shù)據(jù)的功能out是System類中的一個static final的PrintStream類型變量默認情況下,out關(guān)聯(lián)到的標準輸出設(shè)備是屏幕可以通過System類的setOut方法來改變默認的標準輸出流,可以將原來輸出到終端屏幕上的信息轉(zhuǎn)向輸出到文件。39對象序列化概述將一個對象直接轉(zhuǎn)換成字節(jié)流過程稱為對象的序列化。從字節(jié)流中讀取數(shù)據(jù)轉(zhuǎn)換成對象的過程,稱為對象的逆序列化可以簡單的理解為把對象中的屬性以流的形式進行輸入輸出的操作。序列化應用的場景: 永久性保存對象,保存對象的字節(jié)序列到文件中 通過序列化對象在網(wǎng)絡(luò)中傳遞對象 通過序列化在進程間傳遞對象40支持序列化的接口支持序列化的接口: Serializable:類的對象如果想序列化,必須實現(xiàn)該接口。 Serializable接口中沒有定義任何成員,它只用來表示一個類可以被序列化,如果一個類可以序列化,它的所有子類都可以序列化。 Externalizable: Serializable接口的子接口,它表示實現(xiàn)該接口的類在序列化中由該類本身控制數(shù)據(jù)的寫和讀。 ObjectOutput:是DataOut

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論