




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第8章章 JSP中的文件操作中的文件操作 文件可以永久地存儲(chǔ)信息,從本質(zhì)上講文件就是存放在盤上的一系列數(shù)據(jù)的集合。應(yīng)用程序如果想長(zhǎng)期保存數(shù)據(jù),就必須將數(shù)據(jù)存儲(chǔ)到文件中,這就涉及到文件的操作。而在編寫網(wǎng)站應(yīng)用程序的過(guò)程中,有許多地方要對(duì)文件進(jìn)行操作。本章將要對(duì)JSP中文件操作的應(yīng)用作一些介紹,如讀寫文件、上傳下載文件、創(chuàng)建刪除目錄等。本章學(xué)習(xí)目標(biāo)本章學(xué)習(xí)目標(biāo) 了解JSP中的數(shù)據(jù)流。 了解File類。 掌握文件相關(guān)的操作,如讀寫、上傳、下載文件和創(chuàng)建刪除目錄等。 了解使用jspsmartupload上傳包。8.1 數(shù)據(jù)流和數(shù)據(jù)流和File類類 數(shù)據(jù)從一個(gè)輸入源獲得。程序的結(jié)果被送到輸出目的地。這
2、些源和目的地被廣泛地定義。例如一個(gè)網(wǎng)絡(luò)連接器,內(nèi)存緩沖區(qū)或磁盤文件可以被輸入/輸出類熟練地操作,這些外設(shè)都由相同的抽象體流(stream)來(lái)處理。流,是一個(gè)生產(chǎn)或消費(fèi)信息的邏輯實(shí)體。流通過(guò)輸入/輸出系統(tǒng)與物理設(shè)備相連。盡管與之相連的實(shí)際的物理設(shè)備各不相同,所有的流都以同樣的方式運(yùn)轉(zhuǎn)。 JSP定義了兩種數(shù)據(jù)流:字節(jié)流和字符流。 字節(jié)流:為處理字節(jié)式輸入/輸出提供了豐富的環(huán)境,其處理單元為1個(gè)字節(jié),操作字節(jié)和字節(jié)數(shù)組。 InputStream:抽象類是表示字節(jié)輸入流的所有類的超類。 需要定義 InputStream 的子類的應(yīng)用程序必須始終提供返回下一個(gè)輸入字節(jié)的方法。 OutputStream:
3、此抽象類是表示輸出字節(jié)流的所有類的超類。輸出流接受輸出字節(jié)并將這些字節(jié)發(fā)送到某個(gè)接收器。 需要定義 OutputStream 子類的應(yīng)用程序必須始終提供至少一種可寫入一個(gè)輸出字節(jié)的方法。 一個(gè)字節(jié)流可以和其他任何類型的對(duì)象并用,包括二進(jìn)制數(shù)據(jù)。這樣的多功能性使得字節(jié)流對(duì)很多類型的程序都很重要。字節(jié)流以InputStream和OutputStream為頂層。InputStream(輸入流)是一個(gè)定義了流式字節(jié)輸入模式的抽象類,該類的所有方法在出錯(cuò)條件下引發(fā)一個(gè)IOException異常。OutputStream(輸出流)是定義了流式字節(jié)輸出模式的抽象類,該類的所有方法返回一個(gè)void值并且在出錯(cuò)
4、情況下引發(fā)一個(gè)IOException異常。 字符流:提供了處理任何類型輸入/輸出操作的足夠的功能,字符流處理的單元為2個(gè)字節(jié)的Unicode字符,分別操作字符、字符數(shù)組或字符串。 Reader:用于讀取字符流的抽象類。 子類必須實(shí)現(xiàn)的方法只有 read(char, int, int) 和 close()。但是,多數(shù)子類將重寫此處定義的一些方法,以提供更高的效率和/或其他功能。用于讀取字符流的抽象類。 Writer :寫入字符流的抽象類。 子類必須實(shí)現(xiàn)的方法僅有 write(char, int, int)、flush() 和 close()。但是,多數(shù)子類將重寫此處定義的一些方法,以提供更高的效
5、率和/或其他功能。 字符流以Reader和Writer為頂層。Reader是定義Java的流式字符輸入模式的抽象類,該類的所有方法在出錯(cuò)情況下都將引發(fā)IOException異常。Writer是定義流式字符輸出的抽象類,所有該類的方法都返回一個(gè)void值并在出錯(cuò)條件下引發(fā)IOException異常。8.1.2 File類類 File類 文件和目錄路徑名的抽象表示形式。 用戶界面和操作系統(tǒng)使用與系統(tǒng)相關(guān)的路徑名字符串 來(lái)命名文件和目錄。此類呈現(xiàn)分層路徑名的一個(gè)抽象的、與系統(tǒng)無(wú)關(guān)的視圖。抽象路徑名 有兩個(gè)組件: 一個(gè)可選的與系統(tǒng)有關(guān)的前綴 字符串, 比如盤符,“/” 表示 中的根目錄, 表示 Mic
6、rosoft Windows UNC 路徑名,以及 零個(gè)或更多字符串名稱 的序列。 File類:用于文件系統(tǒng)操作的類 Java內(nèi)建的用來(lái)操作文件目錄的類File,該類提供新增、刪除與修改等操作文件相關(guān)功能所需的方法成員。 File類沒(méi)有指定信息怎樣從文件讀取或向文件存儲(chǔ); 它描述了文件本身的屬性。 File對(duì)象用來(lái)獲取或處理與磁盤文件相關(guān)的信息,例如權(quán)限、時(shí)間、日期和目錄路徑。另外,F(xiàn)ile還瀏覽子目錄層次結(jié)構(gòu)??梢杂脕?lái)生成File對(duì)象的構(gòu)造函數(shù)如下。File(String directoryPath)File(String directoryPath,String filename)File
7、(File dirObj,String filename)其中,directoryPath是文件的路徑名,filename是文件名,dirObj是一個(gè)指定目錄的File對(duì)象。第一個(gè)構(gòu)造函數(shù)通過(guò)全路徑路徑文件名來(lái)創(chuàng)建對(duì)象,pathname可以是絕對(duì)路徑也可以是相對(duì)路徑。第二個(gè)構(gòu)造函數(shù)通過(guò)父目錄和文件名來(lái)創(chuàng)建對(duì)象,filename是不含路徑的文件名。第三個(gè)構(gòu)造函數(shù)也是通過(guò)父目錄和文件名來(lái)創(chuàng)建對(duì)象,但父目錄由一個(gè)File對(duì)象提供。注意:文件的路徑有兩種形式,即絕對(duì)路徑和相對(duì)路徑。絕對(duì)路徑包含它所指定的文件的完整路徑信息,根據(jù)絕對(duì)路徑就可以惟一定位一個(gè)文件。而相對(duì)路徑是針對(duì)“其他某個(gè)路徑”而言的,這個(gè)
8、路徑和相對(duì)路徑共同定位一個(gè)文件的位置。 File類位于命名空間java.io,因此在JSP網(wǎng)頁(yè)使用File類之前,必須利用以下的程序代碼,將此命名空間載入: 表8-1 File類的屬性方方 法法說(shuō)說(shuō) 明明isDirectory()返回一個(gè)布爾值,返回一個(gè)布爾值,true表示為目錄,表示為目錄,false則表示是文件,借則表示是文件,借以判斷以判斷File對(duì)象所參考的路徑是否為目錄對(duì)象所參考的路徑是否為目錄isFile()返回一個(gè)布爾值,返回一個(gè)布爾值,true表示為文件,表示為文件,false則表示是目錄,借則表示是目錄,借以判斷以判斷File對(duì)象所參考的路徑是否為文件對(duì)象所參考的路徑是否為文
9、件canRead()返回布爾值,返回布爾值,true表示此為允許讀取的文件表示此為允許讀取的文件canWrite()返回布爾值,返回布爾值,true表示此為允許寫入的文件表示此為允許寫入的文件exists()返回一個(gè)布爾值,返回一個(gè)布爾值,true表示參考的文件目錄存在表示參考的文件目錄存在getName()取得取得File對(duì)象所參考的路徑底下的目錄或文件名稱對(duì)象所參考的路徑底下的目錄或文件名稱getPath()取得取得File對(duì)象所參考的路徑字符串對(duì)象所參考的路徑字符串toString()將將File對(duì)象轉(zhuǎn)換成為以字符串類型的名稱表示對(duì)象轉(zhuǎn)換成為以字符串類型的名稱表示equals()比較兩個(gè)
10、比較兩個(gè)File對(duì)象是否相等對(duì)象是否相等 由于File對(duì)象本身僅僅只是參考一個(gè)特定的路徑,因此上述的路徑及文件參數(shù)也可能代表一個(gè)不存在的文件,在進(jìn)行文件的操作之前,可以利用exists方法,查看文件是否存在,以判斷是否進(jìn)行相關(guān)的文件操作,這一點(diǎn)非常重要,若是嘗試存取一個(gè)不存在的文件,會(huì)讓系統(tǒng)產(chǎn)生一個(gè)錯(cuò)誤的例外對(duì)象。 【例8-1】下面的范例演示一個(gè)查看文件相關(guān)性質(zhì)的JSP網(wǎng)頁(yè)實(shí)例。查看文件內(nèi)容(usingFile.jsp) 一般文件的維護(hù)操作包含了新增、刪除及列舉等操作,F(xiàn)ile類本身也提供了相關(guān)功能的方法成員,列舉如表8-2所示。 表8-2 文件維護(hù)方法方 法說(shuō) 明createNewFile(
11、)創(chuàng)建一個(gè)新文件delete()刪除指定的文件renameTo()重新命名文件setReadonly將文件對(duì)象所參照的文件設(shè)為只讀mkdir()建一指定的目錄mkdirs()建立指定路徑底下的所有目錄 1. 創(chuàng)建文件與目錄文件夾創(chuàng)建文件與目錄文件夾 File類提供一個(gè)名稱為createNewFile()的方法成員,用以建立File對(duì)象參數(shù)所指定的文件,以下為引用此方法的程序代碼范例片段: bool blCreate = myFile.createNewFile() ; 由于createNewFile()返回一個(gè)布爾值,因此必須利用聲明為boolean類型的變量存儲(chǔ)運(yùn)行結(jié)果,若是上式blCrea
12、te結(jié)果值為true,表示文件建立成功;若是false則表示文件建立失敗,并且返回一個(gè)IOException例外對(duì)象,這個(gè)情形通常發(fā)生在指定的目錄底下已經(jīng)存在所要建立的文件,因此在建立文件之前查看其是否存在是非常重要的操作。File類另外提供建立目錄的方法成員mkdir,同樣的我們必須利用File類的實(shí)體對(duì)象引用這個(gè)方法以建立指定的目錄,例如以下的程序代碼File myFile = new File(pathName) ; bool blMK = myFile.mkdir() ; 其中的返回值意義同上述CreateNewFile方法,這里必須注意的是,由于引用這個(gè)方法所要建立的是一個(gè)目錄,因此
13、第1行程序代碼中所指定的參數(shù)值必須是一個(gè)路徑而非文件,同時(shí)指定建立的目錄其上層目錄的路徑必須是存在的,例如下面的程序代碼:boolean blNew ;File myDir = new File(C:/testDir/newDir) ;blNew = myDir.mkdir() ;其中mkdir()在C:/testDir目錄下建立一個(gè)新的目錄newDir,前提是C:/testDir目錄必須存在,否則建立目錄的作業(yè)將會(huì)失敗。 另外一個(gè)類似mkdir()的方法為mkdirs(),這個(gè)方法不同的地方在于若是指定的目錄路徑不存在,則整個(gè)目錄結(jié)構(gòu)均將被創(chuàng)建,例如以下的程序代碼: File myMkDir
14、s = new File(C:/firstDir/secondDir/thirdDir) ; blNew = myMkDirs.mkdirs() ; 當(dāng)網(wǎng)頁(yè)運(yùn)行該段程序代碼的時(shí)候,其中C:/firstDir/secondDir/thirdDir這個(gè)路徑的文件夾以及子文件夾,都會(huì)被建立。2. 刪除文件與目錄數(shù)據(jù)夾刪除文件與目錄數(shù)據(jù)夾刪除文件或者是目錄非常容易,只要引用File類所提供的方法成員delete() 即可。這個(gè)方法將會(huì)刪除File對(duì)象本身所代表的文件或是目錄,也就是建立File對(duì)象,指定路徑底下的文件,或是建立對(duì)象時(shí)所輸入的特定目錄路徑參數(shù)。delete方法有一個(gè)布爾類型的返回值,若是
15、成功刪除指定刪除文件,則返回值為true,當(dāng)指定的文件不存在,或是指定的文件刪除失敗,則返回值為false。另外必須特別注意的是,delete方法只能刪除空目錄,若是目錄底下存在任何文件或是子目錄,刪除的操作會(huì)失敗,并且返回一個(gè)代表刪除目錄失敗的false布爾值。8.2 讀寫文本文件讀寫文本文件 操作文件主要有兩種類型,一種是讀取內(nèi)容,一種是寫入內(nèi)容或者更改文件的屬性。下面分別討論。 讀取文件內(nèi)容 在讀取文件時(shí),可以有兩種選擇方式,一種是通過(guò)ServletContext讀取,另一種是直接使用java.io.FileReader等對(duì)象。前者只能讀取Servlet上下文中的文件,后者可以讀取任何位
16、置的文件。 例使用ServletContext讀取文件readFile.jsp 在ServletContext接口中,定義了一個(gè)java.io.InputStream getResourceAsStrem(java.lang.String path)方法來(lái)訪問(wèn)給定的資源。這里的path參數(shù)必須以“/”開始(在根目錄下)。 一旦獲得了InputStream,我們就可以通過(guò)這個(gè)輸入劉讀取資源。 由于使用InputStream對(duì)象,如果在讀取后不對(duì)字符進(jìn)行重新編碼,那么對(duì)中文將出現(xiàn)亂碼問(wèn)題。而且沒(méi)有使用緩沖的輸入流,它的效率較低。 使用帶緩沖區(qū)的輸入流讀取文件資源。例如readFile2.jsp 使
17、用FileReader讀取文件資源。例readFile3.jsp 使用一個(gè)BufferReader封裝FileReader,這樣可以每次讀取一行數(shù)據(jù)。 寫入內(nèi)容到文件writeFile.jsp PrintWriter類用來(lái)將格式化對(duì)象打印到一個(gè)文本輸出流,實(shí)現(xiàn)PrintStream中的所有打印方法,其使用方法和讀取二進(jìn)制文件中的BufferedReader類似。在上邊的這段代碼中,每次向該二進(jìn)制文件中寫入的新內(nèi)容都會(huì)將原來(lái)的內(nèi)容覆蓋,如果不想覆蓋原來(lái)的內(nèi)容,可以修改如下代碼。 PrintWriter writer=new PrintWriter(new BufferedWriter(new F
18、ileWriter(“d:book.java,true); 即在創(chuàng)建PrintWriter對(duì)象時(shí),添加一個(gè)參數(shù)true,這樣每次向二進(jìn)制文件內(nèi)寫入新的內(nèi)容時(shí),就會(huì)追加到原來(lái)的內(nèi)容后面。 讀寫文件是文件操作最基本的內(nèi)容。 讀寫文本文件所需的功能,主要由2個(gè)類所提供:FileWriter()及FileReader()。 FileReader()則用以讀取文件中的數(shù)據(jù)。 語(yǔ)法如下:FileReadermyFileReader= new FileReader(strFileName) ; 必須輸入指定操作的文件完整路徑名稱或是File對(duì)象 FileReadermyFileReader= new Fil
19、eReader(objFile) ; FileWriter()負(fù)責(zé)將數(shù)據(jù)寫入文件 語(yǔ)法如下:FileWriter myFileWriter = new FileWriter(fileName ) 將數(shù)據(jù)寫入文本文件之前,首先必須建立FileWriter對(duì)象,同時(shí)傳入所要操作的文件完整路徑名稱字符串, FileWriter myFileWriter = new FileWriter(myFile ) 【例8-2】一個(gè)讀寫文本文件的例子readwrite.jsp, 首先創(chuàng)建一個(gè)test.txt文件,并寫入幾句話, 然后再讀取文件中的數(shù)據(jù),并且把它們顯示到瀏覽器里 8.3 文件的瀏覽文件的瀏覽 【例
20、8-3】瀏覽當(dāng)前目錄中文件與子目錄的例子browserFile.jsp,例子執(zhí)行后,會(huì)在瀏覽器中輸出當(dāng)前目錄中的所有文件和子目錄,并對(duì)文件和子目錄進(jìn)行統(tǒng)計(jì)。 8.4 創(chuàng)建和刪除目錄創(chuàng)建和刪除目錄 【例8-4】有關(guān)目錄的創(chuàng)建與刪除的例子Directory.jsp。 1. 2. 3. 文件的上傳和下載文件的上傳和下載 【例8-5】 在這里我們寫一個(gè)簡(jiǎn)單的頁(yè)面uploadfile.jsp,提供一個(gè)表單,用戶從這里選擇文件并把文件上載到服務(wù)器。 jspSmartUpload雖然好用,但是提供此包下載的網(wǎng)站已經(jīng)關(guān)閉,您將無(wú)法從網(wǎng)站上得到。因此本節(jié)還要介紹另外一個(gè)被廣泛使用的上傳包,M
21、ultipartRequest,這是由OReilly所開發(fā)的免費(fèi)軟件,可到下面的網(wǎng)址中下載使用。 http:/ com.oreilly.servlet首頁(yè),如圖所示。來(lái)到這個(gè)網(wǎng)頁(yè)的時(shí)候,將畫面往下拉,在Download區(qū)域單擊cos-05Nov2002.zip文件的下載連接,選擇存儲(chǔ)路徑,完成下載操作。8.6 使用使用OReilly上傳包上傳包解壓下載后的文件,將classes文件夾里面的整個(gè)com目錄,復(fù)制一份到范例根目錄下的classes文件夾下,緊接著我們便可以進(jìn)一步使用制作文件上傳功能網(wǎng)頁(yè)。MultipartRequest在使用之前首先必須在JSP網(wǎng)頁(yè)中將其載入,其包名稱如下:com.
22、oreilly.servlet.MultipartRequestMultipartRequest的使用非常簡(jiǎn)單,只要在網(wǎng)頁(yè)中建立其對(duì)象,便能夠完成上傳操作。建立MultipartRequest的方式非常多,以下為其中比較普遍的一種:MultipartRequest theMultipartRequest = new MultipartRequest(request,path,fileSize) 上面這段程序代碼使用關(guān)鍵字new建立1個(gè)MultipartRequest對(duì)象theMultipartRequest,其中第2行為MultipartRequest的建立方式,它接收3個(gè)參數(shù),第1個(gè)為req
23、uest對(duì)象,包含表單所要傳遞的上傳文件信息,第2個(gè)參數(shù)為文件上傳之后的存儲(chǔ)路徑,第3個(gè)參數(shù)則是所要限制的上傳文件大小。 當(dāng)這段程序代碼在網(wǎng)頁(yè)當(dāng)中被運(yùn)行的時(shí)候,表單上所指定的文件將會(huì)被上傳至服務(wù)器指定的位置進(jìn)行保存。 MultipartRequest的使用方式與SmartUpload有相當(dāng)大的差異,上傳文件相關(guān)信息的獲得,必須以傳送的表單屬性為依據(jù)方 法說(shuō) 明getFileNames()取 得 包 含 所 有 文 件 上 傳 文 件 名 稱 的Enumeration對(duì)象getFilesystemName(fieldName)取得文件名名稱getContentType(fieldName)取得文件名類型getFile(fieldNa
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合作出資協(xié)議書二零二五年
- 二零二五版財(cái)務(wù)總監(jiān)勞動(dòng)合同
- 科技知識(shí)競(jìng)賽題庫(kù)
- 項(xiàng)目建設(shè)公司管理制度
- 公司餐飲費(fèi)管理制度
- 餐廳服務(wù)日常管理制度
- 公司出租車管理制度
- 公司人員管理制度圖
- 餐飲值班帶班管理制度
- 足球球隊(duì)運(yùn)營(yíng)管理制度
- CJJT146-2011 城鎮(zhèn)燃?xì)鈭?bào)警控制系統(tǒng)技術(shù)規(guī)程
- 臭氧在骨科疾病治療中的應(yīng)用
- 2024年安徽省中考英語(yǔ)真題(原卷版+解析版)
- 軸承壓裝力計(jì)算軟件
- 2024年佛山市高三二模普通高中教學(xué)質(zhì)量檢測(cè)二 數(shù)學(xué)試卷(含答案)
- 人力資源外包投標(biāo)方案
- 摩托艇經(jīng)營(yíng)合作協(xié)議書模板
- 2024年浙江首考高考英語(yǔ)卷試題真題及答案解析(含聽力原文+作文范文)
- 住建局安全生產(chǎn)匯報(bào)
- 《老年社會(huì)工作》課件-老年社會(huì)生活相關(guān)理論及應(yīng)用
- 消化系統(tǒng)腫瘤的預(yù)防和治療
評(píng)論
0/150
提交評(píng)論