第十章 JSP的操作.ppt_第1頁
第十章 JSP的操作.ppt_第2頁
第十章 JSP的操作.ppt_第3頁
第十章 JSP的操作.ppt_第4頁
第十章 JSP的操作.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第10章JSP的文件操作,了解File類的使用 了解JSP中的輸入輸出流 學(xué)習(xí)JSP中的文件操作 初步學(xué)習(xí)JSP中實(shí)現(xiàn)文件上傳,JSP使用Java的IO系統(tǒng),因此JSP中對文件的操作和一般Java程序沒有太大的區(qū)別。 java.io.File類專門提供一種抽象,用于以平臺獨(dú)立的方式處理大多數(shù)平臺依賴的、復(fù)雜的文件和路徑名問題 File類包含許多獲取文件屬性的方法以及創(chuàng)建、刪除和重命名文件的方法 File類沒有包含讀寫文件內(nèi)容的方法。,1. File的創(chuàng)建 File類是文件名及其目錄路徑的一個包裝類。它的主要構(gòu)造方法如下: File(Stringfilename):文件的名字或路徑 filena

2、me = “c:/mybook/A.txt” 直接使用名字時,文件與當(dāng)前應(yīng)用程序在同一目錄,放在Tomcat 6.0下。 File(StringdirectoryPath, Stringfilename): directoryPaht = “c:/mybook”, filename = “A.txt” File(Filef, Stringfilename): f = new File(“c:/mybook”), filename = “A.txt”,File類的對象主要用來獲取文件本身的一些信息,例如文件所在的目錄、文件的長度、文件讀寫權(quán)限等,不涉及對文件的讀寫操作。見表10-1 String

3、 getName()獲取文件的名字。 boolean canRead()判斷文件是否是可讀的。 boolean canWrite()判斷文件是否可被寫入。 boolean exists()判斷文件是否存在。 long length()獲取文件的長度(單位是字節(jié))。 String getAbsolutePath()獲取文件的絕對路徑。 String getParent()獲取文件的父目錄。 boolean isFile()判斷文件是否是一個正常文件,而不是目錄。,File類有四個常量:平臺無關(guān)的路徑和文件名分隔符 pathSeparator,pathSeparatorChar 路徑分隔符,在Wi

4、ndow上是;,在Unix上是: Separator,separatorChar 名稱分隔符,在Window上是,在Unix上是“/”,其實(shí)在Windows的程序中也可以用/或者用“ c:booktest.dat 表示成:newFile(“.”).getCanonicalPath()+”book”+File.separator+”test.dat”;,見程序清單10-1 file .html file.jsp,File同樣支持對目錄的操作 isDirectory()方法可以用來判斷是否是一個目錄 makdir()方法實(shí)現(xiàn)對文件目錄的建立,建立成功后返回ture,否則返回false。 見程序清單

5、10-2 在服務(wù)器當(dāng)前目錄建立一個新的子目錄的方法: dircreate.jsp,File中的delete()方法用于刪除此抽象路徑名表示的文件或目錄 如果此路徑名表示一個目錄,則此目錄必須為空才能刪除 下列語句表示刪除對應(yīng)的文件或者目錄: FilefileNeedDelete=newFile(文件或目錄路徑); if(fileNeedDelete.exists()fileNeedDelete.delete(); 見程序清單 dirdelete.jsp,為了進(jìn)行文件讀寫操作,需要用適當(dāng)?shù)腏ava I/O類創(chuàng)建對象,這些對象包含從文件中讀寫數(shù)據(jù)的方法。 Java I/O中的流分為兩種,一種是字節(jié)

6、流,另一種是字符流。Java中其它多種多樣變化的流均是由它們繼承出來的。,圖10-4 輸入流示意圖,圖10-5 輸出流示意圖,以字節(jié)為單位進(jìn)行讀寫的稱為字節(jié)流。 字節(jié)流分為“輸入流”和“輸出流”??梢詮闹凶x出一系列字節(jié)的對象稱為“輸入流”(Input Stream);而能向其中寫入一系列字節(jié)的對象則稱為“輸出流”(Output Stream) 這兩種對象分別是由java.io包中的抽象類InputStream和OutputStream來實(shí)現(xiàn)的。,圖10-6 InputStream類結(jié)構(gòu)圖,圖10-7 OnputStream類結(jié)構(gòu)圖,InputStream類的常用方法: int read()輸入

7、流調(diào)用該方法從源中讀取單個字節(jié)的數(shù)據(jù),該方法返回字節(jié)值(0255之間的一個整數(shù))。如果未讀出字節(jié)就返回-1。 int read(byte b)讀取b.length個字節(jié)到字節(jié)數(shù)組b中,返回實(shí)際讀取的字節(jié)數(shù)目。如果到達(dá)文件的末尾,則返回-1。 int read(byte b, int off, int len) 讀取len個字節(jié)到字節(jié)數(shù)組b中,并返回實(shí)際讀取的字節(jié)數(shù)目。如果到達(dá)文件的末尾,則返回-1。參數(shù)off指定從字節(jié)數(shù)組的某個位置開始存放讀取的數(shù)據(jù)。 void close() 輸入流調(diào)用該方法關(guān)閉輸入流。 long skip(long numBytes) 輸入流調(diào)用該方法跳過numBytes

8、個字節(jié),并返回實(shí)際跳過的字節(jié)數(shù)目。 OutputStream類的常用方法: void write(int n) 輸出流調(diào)用該方法向輸出流寫入單個字節(jié)。 void write(byte b)輸出流調(diào)用該方法向輸出流寫入一個字節(jié)數(shù)組。 void write(byte b,int off,int len) 從給定字節(jié)數(shù)組中起始于偏移量off處取len個字節(jié)寫入到輸出流。 void close() 關(guān)閉輸出流。,Java中的字符流則用于處理字符的輸入和輸出 采用Unicode編碼,以實(shí)現(xiàn)國際化 字符流也是通過兩個頂層的抽象類Reader和Writer的子類來實(shí)現(xiàn)對Unicode字符流的處理,圖10-8

9、 Reader類結(jié)構(gòu)圖,圖10-9 Writer類結(jié)構(gòu)圖,Reader類中常用方法: int read() int read(char b) int read(char b, int off, int len) void close() long skip(long numBytes) Writer類中常用方法: void write(int n) void write(char b) void write(char b,int off,int length) void close(),Java提供了許多進(jìn)行文件輸入輸出的類。從讀寫文件類型的不同,可以將這些類分為文本I/O類與二進(jìn)制I/O類對

10、應(yīng)對文本文件和二進(jìn)制文件進(jìn)行讀寫。 在文本文件中存儲的數(shù)據(jù)是以字符編碼方式表示的 在二進(jìn)制文件中存儲的數(shù)據(jù)是用二進(jìn)制形式來表示的。,在讀取文件中,可以使用兩種方式: 字節(jié)流InputStream的方式: 字符流Reader的方式 在JSP中一般使用的是Reader的子類java.io.FileReader。 同時為了提高輸入效率,可以使用帶緩存(java.io.BufferedReader)的輸入流方式來讀取文件資源。當(dāng)讀取一個文件時,先建立一個指向該文件的文件輸入流in,再建立一個指向文件輸入流in的輸入緩存流。使用readline()方法讀取一行。 若需要讀取的文件不存在,則會拋出File

11、NotFoundException。,見程序清單10-3:直接讀取文本文件dt.txt到頁面顯示的程序:readfile1.jsp 見程序清單10-4:使用緩沖:readfile2.jsp,在寫入文件中,同樣可以使用字節(jié)流和字符流兩種方式 如使用字符輸出流Writer的子類java.io.FileWriter,或使用緩沖(java.io.BufferedWriter)的方法來提高輸出效率。 支持一次輸出一個字符串的方式write(String) newLine()實(shí)現(xiàn)向文件寫入一個換行符。 如果指定文件存在,但它是一個目錄,而不是一個常規(guī)文件;或者該文件不存在,但無法創(chuàng)建它;或因?yàn)槠渌承┰?/p>

12、而無法打開它,則會拋出一個IOException。,見程序清單10-5:從dt.txt讀取的文本內(nèi)容寫入newdt.txt writefile1.jsp 見程序清單10-6:在Web頁中嵌入一個文本框,并將文本框中的內(nèi)容寫入到了文件dt.txt中:writefile2.jsp,前面程序每次寫入文件時寫入的新內(nèi)容都把原來文件中的老內(nèi)容覆蓋了。若要實(shí)現(xiàn)對文件的追加可以有兩種方法: 使用帶有boolean參數(shù)的FileWriter構(gòu)造方法, 使用隨機(jī)讀寫文件類RandomAccessFile。 FileWriter有帶有boolean參數(shù)的構(gòu)造方法 1)FileWriter( Filefile, b

13、ooleanappend) 2)FileWriter( StringfileName, booleanappend) 其中第二個參數(shù)booleanappend,如果為true,則將數(shù)據(jù)寫入文件末尾處,而不是寫入文件開始處,RandomAccessFile的實(shí)例支持對隨機(jī)存取文件的讀取和寫入。 隨機(jī)存取文件存在指向該隱含數(shù)組的光標(biāo)或索引,稱為“文件指針”。輸入/輸出操作從文件指針開始讀/寫字節(jié),并隨著對字節(jié)的讀/寫前移此文件指針。操作導(dǎo)致該數(shù)組擴(kuò)展。 該文件指針可以通過 getFilePointer方法讀取,并通過seek方法設(shè)置,RandomAccessFile的構(gòu)造方法有兩個: 1)Rand

14、omAccessFile( Filefile, Stringmode) 2)RandomAccessFile( Stringname, Stringmode) 第一個參數(shù)用于指定需要打開的文件,第二個參數(shù)Stringmode表示打開文件的方式,共有以下4個參數(shù)可選: 1)r:以只讀方式打開,調(diào)用任何write方法都將導(dǎo)致拋出IOException; 2)rw :以讀取和寫入打開,如果該文件不存在,則嘗試創(chuàng)建該文件; 3)rws :以讀取和寫入打開,還要求對文件的內(nèi)容或元數(shù)據(jù)的每個更新都同步寫入到基礎(chǔ)存儲設(shè)備,元數(shù)據(jù)指文件的信息數(shù)據(jù),如最后修改時間,長度等; 4) rwd :以讀取和寫入打開,還

15、要求對文件內(nèi)容的每個更新都同步寫入到基礎(chǔ)存儲設(shè)備,但不寫入元數(shù)據(jù)的每個更新。,見程序清單10-7:用RandomAccessFile實(shí)例進(jìn)行隨機(jī)讀寫: writefile3.jsp,用戶通過一個JSP頁面上傳文件給服務(wù)器時,該JSP頁面必須含有File類型的表單,并且表單必須將ENCTYPE的屬性值設(shè)成multipart/form-data。 JSP引擎可以讓內(nèi)置對象request調(diào)用方法getInputStream()或getReader()方法獲得一個輸入流,通過這個輸入流讀入用戶上傳的全部信息,包括文件的內(nèi)容以及表單域的信息。,見程序清單10-8upload1.html,upload1.

16、jsp,去掉表單信息 將用戶提交的全部信息保存成一個臨時文件,該臨時文件的名字是用戶的session對象的Id,然后讀取臨時文件的第2行,因?yàn)檫@一行中含有用戶上傳的文件的名字,再獲取第4行結(jié)束的位置以及倒數(shù)第6行結(jié)束的位置,因?yàn)檫@兩個位置之間的內(nèi)容是上傳文件的內(nèi)容,然后將這部分內(nèi)容存入文件,該文件的名字與用戶上傳的文件的名字保持一致,最后刪除臨時文件。,見程序清單10-8upload2.jsp,也可以用一個JavaBean或者Servlet處理文件上傳任務(wù),上傳組件jspSmartUpload,適用于嵌入執(zhí)行上傳操作的JSP文件中 利用jspSmartUpload組件提供的對象及其操作方法,可

17、以獲得全部上傳文件的信息方便存取,而且能對上傳的文件在大小、類型等方面做出限制,可以濾掉不符合要求的文件。,jspSmartUpload包含有5個類,分別是: 1)File:上傳文件的抽象表示類; 2)Files:包含多個上傳文件的File實(shí)例; 3)Request:等價于Servlet的ServletRequest類; 4)SmartUpload:實(shí)現(xiàn)上傳的類; 5)SmartUploadException:上傳拋出的異常類。 在實(shí)際上傳處理中,一定要用到的是File類和SmartUpload類 File實(shí)例可以調(diào)用Files的getFile(int)方法創(chuàng)建,而Files可以調(diào)用SmartUpload的getFiles()創(chuàng)建 File的常用方法見表10-5所示 SmartUpload的常用方法見表10-6所示。,表10-5 File的常用方法,表

溫馨提示

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

評論

0/150

提交評論