




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
《JAVA程序設(shè)計》課程1、Java文件系統(tǒng)操作
主要內(nèi)容2、字節(jié)流3、字符流Java程序設(shè)計4、轉(zhuǎn)換流1.掌握文件系統(tǒng)操作的常用類和方法《JAVA程序設(shè)計》課程
學(xué)習(xí)目標(biāo)2.掌握字節(jié)流的概念和常用操作方法3.掌握字符流的概念和常用操作方法4.掌握轉(zhuǎn)換流的概念和常用操作方法9.1.1項目描述《JAVA程序設(shè)計》課程
9.1文件設(shè)計一個程序,將某個目錄下的所有文件夾和文件以樹型結(jié)構(gòu)打印出來。9.1.2項目知識準(zhǔn)備《JAVA程序設(shè)計》課程
9.1文件(1)File類概述File類用于文件和目錄管理,可以對文件和目錄進行列舉、刪除、新建、屬性查看、設(shè)置等操作,不能對文件的內(nèi)容進行讀寫。使用File類時需要引入java.io包。(2)File類的構(gòu)造方法常用的File類構(gòu)造方法有3種格式:File(Stringpathname) 通過給定路徑名字符串創(chuàng)建一個新的File對象。File(Stringparent,Stringchild) 根據(jù)parent路徑名字符串和child路徑名字符串創(chuàng)建一個新的File對象。File(Fileparent,Stringchild)根據(jù)parent路徑名和child路徑名字符串創(chuàng)建一個新的File對象。File對象既可以表示一個目錄,也可以表示一個文件。下面的例子中對3個構(gòu)造函數(shù)進行測試,分別構(gòu)造指向文件和目錄的File對象:案例9-1:File類構(gòu)造方法測試《JAVA程序設(shè)計》課程
9.1文件importjava.io.*;publicclassTest{ publicstaticvoidmain(String[]args) { Filedir1=newFile("d:");《JAVA程序設(shè)計》課程
9.1文件Filedir2=newFile("d:","test"); Filedir3=newFile(dir1,"test"); Filef1=newFile("d:\\test\\1.txt");//等價于Filef1=newFile("d:/test/1.txt"); Filef2=newFile(dir3,"1.txt"); System.out.println(dir1.getPath());//輸出構(gòu)造好的File對象的路徑 System.out.println(dir2.getPath()); System.out.println(dir3.getPath()); System.out.println(f1.getPath()); System.out.println(f2.getPath()); }輸出的結(jié)果如圖:《JAVA程序設(shè)計》課程
9.1文件圖9.1File對象的構(gòu)造方法測試(3)File類的常用方法《JAVA程序設(shè)計》課程
9.1文件(1)booleanexists() 判斷文件或目錄是否存在,存在返回true,不存在返回false。(2)StringgetName() 得到文件或目錄的名稱。(3)StringgetParent() 得到文件父目錄的名稱。(4)StringgetPath() 得到完整的相對路徑?!禞AVA程序設(shè)計》課程
9.1文件(5)StringgetAbsolutePath() 得到完整的絕對路徑。為了和getPath區(qū)別,用下面的例子進行測試: Filedir1=newFile("/test"); System.out.println(dir1.getPath()); System.out.println(dir1.getAbsolutePath()); 由于當(dāng)前路徑在D盤,所以打印結(jié)果是: \test D:\test(6)booleanisDirectory() 判斷是否為一個目錄,是則返回true,否則返回false?!禞AVA程序設(shè)計》課程
9.1文件(7)booleanisFile() 判斷是否為一個文件,是則返回true,否則返回false。(8)longlength() 得到文件的長度,以字節(jié)為單位。(9)booleancanRead() 判斷文件是否可讀,可讀返回true,否則返回false。(10)booleancanWrite() 判斷文件是否可寫,可寫返回true,否則返回false。(11)booleanisHidden() 該方法判斷是否為隱藏文件,是則返回true,否則返回false?!禞AVA程序設(shè)計》課程
9.1文件(12)longlastModified() 該方法得到文件最后一次修改的時間,是1970年1月1日00:00:00GMT的毫秒數(shù)。(13)booleansetReadOnly() 將文件設(shè)置為只讀。(14)booleanrenameTo(Filedest) 該方法用于修改文件名字,語法格式: fileObj.renameTo(Filedest) 重命名成功返回true,失敗返回false,該方法不能移動文件。(15)booleandelete()該方法刪除文件或目錄,成功返回true,否則返回false。刪除目錄時,要 《JAVA程序設(shè)計》課程
9.1文件保證里面沒有子目錄或子文件。(16)booleanmkdir() 創(chuàng)建此路徑名指定的目錄。成功返回true,失敗返回false。(17)booleanmkdirs()創(chuàng)建此路徑名指定的目錄,包括創(chuàng)建必需但不存在的父目錄。成功返回true,失敗返回false。(4)文件的列舉列舉文件調(diào)用用File類的list方法或listFiles方法,該方法定義如下:String[]list()返回此路徑名對應(yīng)目錄下的文件和子目錄名稱組成字符串?dāng)?shù)組。File[]listFiles()返回一個File數(shù)組,表示此目錄下的所有子目錄和文件。下面的例子演示如何列舉某個目錄下的子目錄和文件:案例9-2:列舉子目錄和文件《JAVA程序設(shè)計》課程
9.1文件importjava.io.*;publicclassFileTest{ publicstaticvoidmain(String[]args) { Filedir=newFile("d:/test"); File[]f=dir.listFiles();//獲得所有子目錄和文件構(gòu)成的File數(shù)組 Stringtag; for(inti=0;i<f.length;i++) {《JAVA程序設(shè)計》課程
9.1文件{ if(f[i].isDirectory())tag="[dir]";//目錄前加[dir]標(biāo)志 elsetag=""; System.out.println(tag+f[i].getAbsolutePath()); } }}9.1.3項目實施《JAVA程序設(shè)計》課程
9.1文件(1)功能分析 文件的組織結(jié)構(gòu)是樹型結(jié)構(gòu),顯示目錄樹,本質(zhì)上是對多叉樹進行遍歷。多叉樹的遍歷有遞歸和非遞歸算法兩種,該項目中用堆棧輔助實現(xiàn)非遞歸算法。 為保存當(dāng)前訪問到的樹節(jié)點信息,構(gòu)造了一個FileInfo類進行輔助,包含當(dāng)前的File對象、當(dāng)前目錄的順序號和當(dāng)前目錄的級別。(2)編碼通過分析我們可以編寫以下代碼實現(xiàn)功能:《JAVA程序設(shè)計》課程
9.1文件importjava.io.*;importjava.util.*;classFileInfo//用于存放節(jié)點信息{ privateFilefp;//當(dāng)前節(jié)點對應(yīng)的File對象 privateintindex;//訪問到的子文件序號 privateintlevel;//當(dāng)前節(jié)點的級別 publicFileInfo(Filefp,intindex,intlevel) { this.fp=fp; this.index=index;《JAVA程序設(shè)計》課程
9.1文件this.level=level; } publicFilegetFile(){returnfp;} publicintgetIndex(){returnindex;} publicintgetLevel(){returnlevel;} publicvoidsetIndex(intindex){this.index=index;}}publicclassTest{privatestaticvoidtreeView(Stringpath)《JAVA程序設(shè)計》課程
9.1文件{ Filef=newFile(path); if(f.isFile())//path為一個文件,無須繼續(xù)遍歷 { System.out.println(f.getName()); return; }Stack<FileInfo>stk=newStack<FileInfo>();//建立一個空的堆棧 inti,j; booleanfoundDir; //存在子目錄的標(biāo)志《JAVA程序設(shè)計》課程
9.1文件FileInfofinfo=newFileInfo(f,0,0); stk.push(finfo);//將根節(jié)點入棧 while(!stk.empty()) { finfo=stk.peek();//獲取棧頂元素(不彈出) f=finfo.getFile(); foundDir=false; //從上一次處理到的順序號開始,繼續(xù)考查后續(xù)子節(jié)點 for(i=finfo.getIndex();!foundDir&&i<f.listFiles().length;i++)《JAVA程序設(shè)計》課程
9.1文件{//根據(jù)級別產(chǎn)生縮進(前面加空格) for(j=0;j<finfo.getLevel();j++) System.out.print(""); System.out.print(f.listFiles()[i].getName());//打印當(dāng)前節(jié)點 if(f.listFiles()[i].isDirectory())//當(dāng)前節(jié)點為目錄 { System.out.print("*");//目錄標(biāo)志 finfo.setIndex(i+1); stk.push(newFileInfo(f.listFiles()[i],0,finfo.getLevel()+1));//子目錄入棧《JAVA程序設(shè)計》課程
9.1文件 foundDir=true; } System.out.println();//換行 } if(!foundDir)stk.pop();//沒有下級子文件夾,當(dāng)前文件夾出棧 } }publicstaticvoidmain(String[]args){ treeView("d:\\test");}}《JAVA程序設(shè)計》課程
9.1文件《JAVA程序設(shè)計》課程
9.1文件3)調(diào)試運行,顯示結(jié)果該程序的運行結(jié)果如圖9.2所示:圖9.2顯示目錄樹9.1.4能力拓展《JAVA程序設(shè)計》課程
9.1文件(1)選擇題①要判斷D盤下是否存在文件abc.txt,應(yīng)該使用的語句是()。A.if(newFile("d:abc.txt").exists()==1)B.if(File.exists("d:abc.txt")==1)C.if(newFile("d:/abc.txt").exists())D.if(File.exists("d:/abc.txt"))②以下關(guān)于File類說法正確的是()A.File對象代表了操作系統(tǒng)中的一個真實存在的文件或文件夾B.可以使用File對象創(chuàng)建或刪除一個文件C.可以使用File對象創(chuàng)建或刪除一個文件夾D.當(dāng)一個File對象被回收時,系統(tǒng)中對應(yīng)的文件或文件夾也被刪除《JAVA程序設(shè)計》課程
9.1文件③以下是創(chuàng)建File對象的代碼,錯誤的是()A.Filef1=newFile("/mydir/myfile.txt");B.Filef2=newFile("/mydir","myfile.txt");C.Filef3=newFile("\\mydir\\myfile.txt");D.Filef4=newFile("\mydir\myfile.txt");(2)填空題①File對象調(diào)用方法創(chuàng)建一個目錄。②能獲得文件對象父路徑名的方法是。③判斷文件或目錄是否存在用方法。(3)編程題①查找某個目錄下所有擴展名為“txt”的文件,并將文件的完整路徑顯示在屏幕上。②統(tǒng)計某個目錄下每種類型文件的個數(shù)(文件類型根據(jù)擴展名來區(qū)別),并將統(tǒng)計結(jié)果顯示在屏幕上。9.2.1項目描述《JAVA程序設(shè)計》課程9.2字節(jié)流編程實現(xiàn)文件內(nèi)容拷貝。9.2.2項目知識準(zhǔn)備《JAVA程序設(shè)計》課程9.2字節(jié)流(1)流的概念和分類 Java中的流(Stream)代表任何有能力輸出數(shù)據(jù)的輸出源,或是任何有能力接收數(shù)據(jù)的接收源,鍵盤輸入,文件讀出、寫入,網(wǎng)絡(luò)接收、發(fā)送,顯示器輸出、打印機輸出,都可以抽象為數(shù)據(jù)“流”。 Java中的流數(shù)量比較多,分類的方式主要有三種:1)按照輸入的方向,分為輸入流和輸出流;2)按照處理數(shù)據(jù)的單位不同,分為字節(jié)流和字符流,字節(jié)流讀取(或?qū)懭耄┑淖钚挝皇且粋€字節(jié),而字符流一次讀取(或?qū)懭耄┑淖钚挝皇且粋€字符。3)按照功能的不同,分為節(jié)點流和處理流(也稱過濾流),節(jié)點流可以直接通過一個特《JAVA程序設(shè)計》課程9.2字節(jié)流定的地方(如磁盤、內(nèi)存,或其它設(shè)備)讀寫數(shù)據(jù),處理流對一個已存在的流進行連接和封裝,其構(gòu)造方法總是要帶一個其他的流對象作參數(shù)。Java中負責(zé)字節(jié)輸入輸出的頂層抽象流類是InputStream和OutputStream。(2)InputStream 字節(jié)輸入流類都屬于InputStream的子類,為了更抽象,InputStream類只提供了少量方法,這些方法如下:(1)available 該方法得到可讀取的輸入字節(jié)數(shù)。定義如下 intavailable()throwsIOException《JAVA程序設(shè)計》課程9.2字節(jié)流(2)read 該方法用于讀取數(shù)據(jù),定義如下: abstractintread()throwsIOException 從輸入流讀取下一個數(shù)據(jù)字節(jié),如果已到文件尾就返回-1。 intread(byte[]b)throwsIOException 從輸入流中讀取一定數(shù)量的字節(jié)并將其存儲在緩沖區(qū)數(shù)組b中,返回實際讀 取的字節(jié)數(shù),如果已到文件尾就返回-1。 intread(byte[]b,intoffset,intlen)throwsIOException 將輸入流中最多l(xiāng)en個數(shù)據(jù)字節(jié)讀入字節(jié)數(shù)組,并從offset指定的下標(biāo)開始 存放。如果已到文件尾就返回-1,否則返回實際讀取的字節(jié)數(shù)?!禞AVA程序設(shè)計》課程9.2字節(jié)流3)skip 該方法在輸入流中跳過指定的字節(jié)數(shù),返回實際跳過的字節(jié)數(shù)。定義如下: longskip(longn);throwsIOException4)close該方法關(guān)閉輸入流并釋放與此有關(guān)的所有系統(tǒng)資源。定義如下:voidclose()throwsIOException《JAVA程序設(shè)計》課程9.2字節(jié)流(3)FileInputStream類FileInputStream(文件輸入流)類是InputStream類的子類,用于以字節(jié)方式讀取文件內(nèi)容,一般用下面兩者形式的構(gòu)造方法來構(gòu)造FileInputStream對象:FileInputStream(Filefile) 通過打開一個到實際文件的連接來創(chuàng)建FileInputStream對象,該文件通過 File對象指定。FileInputStream(Stringname) 通過打開一個到實際文件的連接來創(chuàng)建FileInputStream對象,該文件通過 路徑名name指定。 下面演示文件輸入流的使用:案例9-3:以字節(jié)方式讀文件《JAVA程序設(shè)計》課程9.2字節(jié)流importjava.io.*;publicclassReadTest{ publicstaticvoidmain(String[]args){ try{ byte[]b=newbyte[100];//數(shù)據(jù)緩存 intn; InputStreamis=newFileInputStream("d:\\abc.txt");while((n=is.read(b))!=-1)//n表示實際讀取到的字節(jié)數(shù) {《JAVA程序設(shè)計》課程9.2字節(jié)流 for(inti=0;i<n;i++) System.out.print((char)b[i]);//轉(zhuǎn)換成字符顯示 } is.close();//關(guān)閉流 }catch(Exceptione){ e.printStackTrace(); } }}《JAVA程序設(shè)計》課程9.2字節(jié)流(4)FileOutputStream類FileOutputStream類是OutputStream類的子類,用于以字節(jié)方式寫入數(shù)據(jù)流到文件,一般用下面兩者形式構(gòu)造FileOutputStream對象:FileOutputStream(Filefile)提醒:任何文件都由字節(jié)構(gòu)成,并可以用read方法分塊讀取并存放到字節(jié)數(shù)組中,read方法的返回值表示實際讀取到的字節(jié)數(shù),如果為-1,表示文件內(nèi)容已經(jīng)讀取完畢。只有包含英文字母、數(shù)字、英文符號的文本文件內(nèi)容才能以字節(jié)方式讀取并顯示,其它格式的文件用這種方法顯示會產(chǎn)生亂碼?!禞AVA程序設(shè)計》課程9.2字節(jié)流創(chuàng)建一個向指定File對象表示的文件中寫入數(shù)據(jù)的文件輸出流。FileOutputStream(Filefile,booleanappend) 創(chuàng)建一個向指定File對象表示的文件中寫入數(shù)據(jù)的文件輸出流。append參 數(shù)為true表示在末尾追加數(shù)據(jù)。FileOutputStream(Stringname) 創(chuàng)建一個向具有指定名稱的文件中寫入數(shù)據(jù)的文件輸出流。FileOutputStream(Stringname,booleanappend) 創(chuàng)建一個向具有指定名稱的文件中寫入數(shù)據(jù)的文件輸出流。append參數(shù)為 true表示在末尾追加數(shù)據(jù)。案例9-4:將字節(jié)數(shù)據(jù)寫入文件《JAVA程序設(shè)計》課程9.2字節(jié)流importjava.io.*;publicclasswrite{ publicstaticvoidmain(String[]args){ try{ Strings="Hello!"; byte[]b=s.getBytes();//字符串轉(zhuǎn)換為字節(jié)數(shù)組 OutputStreamos=newFileOutputStream("d:\\abc.txt"); os.write(b);//寫入“Hello!”《JAVA程序設(shè)計》課程9.2字節(jié)流os.write(97);//寫入字母a os.write(98);//寫入字母b os.close();System.out.println("寫入文件成功!!"); }catch(Exceptione){ e.printStackTrace(); } }}9.2.3項目實施《JAVA程序設(shè)計》課程9.2字節(jié)流(1)功能分析文件拷貝涉及兩個文件,因此要同時打開一個文件輸入流和一個文件輸出流。輸入流先從文件A中讀取數(shù)據(jù),存入字節(jié)數(shù)組中,輸出流再將字節(jié)數(shù)組中的數(shù)據(jù)寫入文件B,這樣循環(huán)進行,直到全部數(shù)據(jù)拷貝完畢。(2)編碼通過分析我們可以編寫以下代碼實現(xiàn)功能:importjava.io.*;publicclassFileCopy{ staticvoidcopy(Stringsrc,Stringdest) {《JAVA程序設(shè)計》課程9.2字節(jié)流byte[]b=newbyte[2048];//緩沖區(qū)大小為2K intn; try { InputStreamis=newFileInputStream(src); OutputStreamos=newFileOutputStream(dest); while((n=is.read(b))!=-1)//通過InputStream讀取數(shù)據(jù)到字節(jié)數(shù)組b os.write(b,0,n);//將字節(jié)數(shù)組b中的數(shù)據(jù)通過OutputStream寫入文件 is.close(); os.close();《JAVA程序設(shè)計》課程9.2字節(jié)流System.out.println(“文件復(fù)制成功”); } catch(IOExceptione){System.out.print(e.getMessage());} }
publicstaticvoidmain(String[]args){
copy("d:\\1.jpg","d:\\2.jpg"); }}《JAVA程序設(shè)計》課程9.2字節(jié)流(3)調(diào)試運行該程序?qū)D像文件“d:\1.jpg”拷貝到“d:\2.jpg”,運行后用看圖軟件查看拷貝后的圖像是否正確。9.2.4能力拓展《JAVA程序設(shè)計》課程9.2字節(jié)流(1)選擇題①下列說法正確的是()A.輸入流包含write方法B.輸出流包含read方法C.輸出流包括skip方法D.輸入流包括skip方法②判斷文件輸入流是否結(jié)束的標(biāo)志是()A.read方法的返回值為0B.write方法的返回值為0C.read方法的返回值為-1D.write方法的返回值為-1《JAVA程序設(shè)計》課程9.2字節(jié)流③FileOutputStream的父類是()。A.FileOutputB.FileC.OutputStreamD.InputStream(2)填空題①對于FileInputStream,從方向上來分,它是流,從數(shù)據(jù)單位上分,它是流,從功能上分,它是流。②intread(byte[]b)方法返回值表示,參數(shù)表示。③如果使用FileOutputStream(Stringpath,booleanappend)這個構(gòu)造方法創(chuàng)建對象,并設(shè)置第二個參數(shù)值為true,則效果為。(3)編程題生成楊輝三角的前8行,并將數(shù)值寫入文本文件“yh.txt”中,要求用記事本打開能看到正確的數(shù)值和形狀。9.3.2項目知識準(zhǔn)備《JAVA程序設(shè)計》課程9.3字符流(1)字符流概述與字符輸入輸出相關(guān)的Reader、Writer及其子類主要是為了方便字符的讀寫。字符在文件中存儲,或在網(wǎng)絡(luò)中傳輸時,常用的編碼有GB2312、GBK、Unicode、UTF-8等,這些編碼中,一個字符對應(yīng)若干個字節(jié),編程人員希望能讀寫完整的字符,而不是將一個個字節(jié)來自己進行拼湊。作為一個成熟完善的應(yīng)用開發(fā)平臺,Java責(zé)無旁貸地提供了字符讀寫功能,使字符數(shù)據(jù)的輸入輸出變得簡單。《JAVA程序設(shè)計》課程9.3字符流(2)Reader抽象類Reader類是所有字符輸入流的父類,該類定義了以字符為單位讀取數(shù)據(jù)的基本方法,并在其子類中實現(xiàn)。該類主要定義下面三個方法:(1)read該方法進行了重載,有3種形式:intread()throwsIOException 讀取單個字符,返回值可以用強制轉(zhuǎn)為char類型。intread(char[]cbuf)throwsIOException 將字符讀入字符數(shù)組。abstractintread(char[]cbuf,intoffset,intlen)throwsIOException 將字符讀入數(shù)組cbuf的某一部分。offset為開始存儲字符處的偏移量,len為要 讀取的最多字符數(shù),返回實際讀取到的字符數(shù)?!禞AVA程序設(shè)計》課程9.3字符流(2)skip該方法在讀取時跳過若干個字符,定義為:publiclongskip(longn)throwsIOException(3)close該方法關(guān)閉輸入流。(3)FileReader類FileReader類用于操作系統(tǒng)默認編碼的文本文件讀?。ㄔ诤嗴w中文系統(tǒng)下,ANSI編碼代表GBK編碼)。例如,當(dāng)保存記事本文檔時,默認選項就是ANSI(即GBK編碼),如圖9.3所示:《JAVA程序設(shè)計》課程9.3字符流圖9.3保存記事本文檔時的默認編碼比如d:\test\1.txt是一個存儲為ANSI編碼(即操作系統(tǒng)默認編碼)格式的文本文件,可以用FileReader讀取并顯示:案例9-5:讀取用系統(tǒng)默認編碼保存的文本文件《JAVA程序設(shè)計》課程9.3字符流importjava.io.*;publicclassTestFileReader{ publicstaticvoidmain(String[]args) { char[]c=newchar[1024];//數(shù)據(jù)緩沖區(qū) intn; try { FileReaderfr=newFileReader("d:\\test\\1.txt");《JAVA程序設(shè)計》課程9.3字符流 while((n=fr.read(c))!=-1) System.out.print(newString(c,0,n));//將字符數(shù)組轉(zhuǎn)換為字符串顯示 fr.close(); } catch(IOExceptione){System.out.print(e.getMessage());} }}《JAVA程序設(shè)計》課程9.3字符流(4)InputStreamReader類InputStreamReader類和FileInputStream類配合使用,可以實現(xiàn)更強大的文本文件讀取功能,適用于各種編碼的文本文件。該例子演示“UTF-8”編碼的文本文件讀取。運行前,先用記事本編輯一個文本文件,再另存為“d:\test\1.txt”,保存時選擇編碼為“UTF-8”:案例9-6:讀取用其它編碼保存的文本文件importjava.io.*;publicclassTestInputStreamReader{ publicstaticvoidmain(String[]args) {《JAVA程序設(shè)計》課程9.3字符流try { FileInputStreamis=newFileInputStream("d:\\test\\1.txt");//打開字節(jié)流 InputStreamReaderisr=newInputStreamReader(is,"UTF-8");//設(shè)置字符編碼 char[]c=newchar[1024];//數(shù)據(jù)緩沖區(qū) intn;isr.skip(1);//丟棄第一個字符,該字符是記事本程序加的編碼識別標(biāo)志 while((n=isr.read(c))!=-1)《JAVA程序設(shè)計》課程9.3字符流 System.out.print(newString(c,0,n));//將字符數(shù)組轉(zhuǎn)換為字符串顯示
isr.close(); is.close(); } catch(IOExceptione){System.out.print(e.getMessage());} }}提醒:FileInputStream屬于字節(jié)流,并且屬于直接與磁盤文件相連的節(jié)點流,InputStreamReader對FileInputStream進行包裝,屬于字符流,處理流?!禞AVA程序設(shè)計》課程9.3字符流(5)Writer抽象類Writer類是所有字符輸出流的父類,該類定義了以字符為單位寫入數(shù)據(jù)的基本方法,并在其子類中實現(xiàn)。該類主要定義下面三個方法:(1)Write該方法進行了重載,有下面5種形式: voidwrite(intc)throwsIOException寫入單個字符。 voidwrite(char[]cbuf)throwsIOException寫入字符數(shù)組。 abstractvoidwrite(char[]cbuf,intoff,intlen)throwsIOException寫入字符數(shù)組的某一部分。 voidwrite(Stringstr)throwsIOException寫入字符串。 voidwrite(Stringstr,intoff,intlen)throwsIOException寫入字符串的某一部分。《JAVA程序設(shè)計》課程9.3字符流voidwrite(Stringstr)throwsIOException寫入字符串。 voidwrite(Stringstr,intoff,intlen)throwsIOException寫入字符串的某一部分。2)flush該方法輸出緩沖區(qū)中的數(shù)據(jù),立即寫入預(yù)期的目標(biāo)。3)close該方法關(guān)閉輸出流。(6)FileWriter類FileWriter類以操作系統(tǒng)默認編碼格式將字符寫入文本文件,例如:案例9-7:用操作系統(tǒng)默認編碼將字符寫入文本文件中《JAVA程序設(shè)計》課程9.3字符流importjava.io.*;publicclassTestFileWriter{ publicstaticvoidmain(String[]args) { try { FileWriterfw=newFileWriter("d:\\test\\1.txt"); Strings="路漫漫其修遠兮,吾將上下而求索。";《JAVA程序設(shè)計》課程9.3字符流 fw.write(s); fw.close();System.out.println(“文件寫入成功!!!”); } catch(IOExceptione){System.out.print(e.getMessage());} }寫入后,用記事本打開查看,可以發(fā)現(xiàn)文件是以系統(tǒng)默認編碼(ANSI)保存的。(7)OutputStreamWriter類OutputStreamWriter類和FileOutputStream類配合使用,可以設(shè)置字符寫入文本文件時的編碼格式?!禞AVA程序設(shè)計》課程9.3字符流案例9-8:用UTF-8編碼將字符寫入文本文件中importjava.io.*;publicclassTestOutputStreamWriter{ publicstaticvoidmain(String[]args) { try { FileOutputStreamos=newFileOutputStream("d:\\test\\1.txt"); OutputStreamWriterosw=newOutputStreamWriter(os,"UTF-8"); Strings="路漫漫其修遠兮,吾將上下而求索。";《JAVA程序設(shè)計》課程9.3字符流 osw.write(s); osw.close(); os.close(); } catch(IOExceptione){} }} 寫入后,用記事本打開查看,可以發(fā)現(xiàn)文件是以UTF-8編碼保存的?!禞AVA程序設(shè)計》課程9.3字符流8)緩沖讀寫B(tài)ufferedReader和BufferedWriter用來包裝字符流,它們都擁有默認大小為8192字符的緩存。用BufferedReader讀取時,先把字符讀到緩存里,到緩存滿了或者主動調(diào)用flush方法的時候,再讀入內(nèi)存;用BufferedWriter寫入時先把字符寫入緩存,到緩存滿了或者主動調(diào)用flush方法的時候,再寫入目標(biāo)設(shè)備(如磁盤)。BufferedReader的構(gòu)造方法定義如下:BufferedReader(Readerin)創(chuàng)建一個使用默認大小緩沖區(qū)的緩沖字符輸入流。BufferedReader(Readerin,intsz)創(chuàng)建一個使用指定大小緩沖區(qū)的緩沖字符輸入流。BufferedWriter的構(gòu)造方法定義如下:《JAVA程序設(shè)計》課程9.3字符流案例9-8:字符輸出流緩沖寫入文本文件importjava.io.*;publicclasstestBufferedWriter{ publicstaticvoidmain(String[]args) { try
{ FileOutputStreamos=newFileOutputStream("d:\\test\\1.txt"); OutputStreamWriterosw=newOutputStreamWriter(os,"UTF-8"); BufferedWriterbw=newBufferedWriter(osw);《JAVA程序設(shè)計》課程9.3字符流案例9-8:字符輸出流緩沖寫入文本文件importjava.io.*;publicclasstestBufferedWriter{ publicstaticvoidmain(String[]args) { try
{ FileOutputStreamos=newFileOutputStream("d:\\test\\1.txt"); OutputStreamWriterosw=newOutputStreamWriter(os,"UTF-8"); BufferedWriterbw=newBufferedWriter(osw);《JAVA程序設(shè)計》課程9.3字符流 一些文本文件是按行來存放信息的,讀取時也需要按行來讀,BufferedReader提供的readLine方法此時可以派上用場。案例9-9:按行讀取文本文件importjava.io.*;publicclassTestBufferedReader{ publicstaticvoidmain(String[]args){ try{ InputStreamis=newFileInputStream("d:\\test\\1.txt"); InputStreamReaderisr=newInputStreamReader(is);《JAVA程序設(shè)計》課程9.3字符流 BufferedReaderbr=newBufferedReader(isr); Strings; while((s=br.readLine())!=null)//readLine返回null表示結(jié)束 { System.out.println(s);//處理一行字符 } br.close(); isr.close(); is.close(); }catch(Exceptione){ e.printStackTrace(); } }}《JAVA程序設(shè)計》課程9.3字符流9)隨機文件讀寫 和流式文件讀寫相比,隨機文件讀寫具有定位靈活的特點。在隨機讀取方式下,可以把文件指針定位到某個位置(位置的計算從0開始),再讀寫若干字節(jié)。Java中使用RandomAccessFile類進行隨機文件讀寫。RandomAccessFile類的構(gòu)造方法定義如下:publicRandomAccessFile(Filefile,Stringmode) throwsFileNotFoundExceptionpublicRandomAccessFile(Stringname,Stringmode) throwsFileNotFoundException構(gòu)造方法的第一個參數(shù)可以是File對象或用字符串表示的文件路徑,第二個參數(shù)表示打開文件的方式,可以選擇“r”(只讀)或“rw”(讀寫)?!禞AVA程序設(shè)計》課程9.3字符流RandomAccessFile類的常用方法有:(1)seek 該方法定位文件指針,定義為:publicvoidseek(longpos)throwsIOException(2)getFilePointer 該方法返回文件指針的位置,定義為:publiclonggetFilePointer()throwsIOException(3)length 該方法返回文件的長度,定義為:publiclonglength()throwsIOException(4)close 該方法關(guān)閉文件并釋放所占資源。定義為:publicvoidclose()throwsIOException《JAVA程序設(shè)計》課程9.3字符流(5)讀取數(shù)據(jù)以read開頭的方法從文件中讀取不同類型的數(shù)據(jù),具體可以參考JavaAPI手冊。(6)寫入數(shù)據(jù)以write開頭的方法向文件中寫入不同類型的數(shù)據(jù),具體可以參考JavaAPI手冊。《JAVA程序設(shè)計》課程9.3字符流(1)功能分析編碼轉(zhuǎn)換時,打開文件A并得到一個文件輸入流(FileInputStream),用輸入流讀取器(InputStreamReader)根據(jù)GBK編碼格式讀取若干字節(jié),存入字符數(shù)組c中;同時打開文件B得到一個文件輸出流,用輸出流寫入器(OutputStreamWriter)根據(jù)UTF-8編碼格式,將字符數(shù)組c中的數(shù)據(jù)寫入另外一個文件。如此循環(huán)進行,直到全部數(shù)據(jù)轉(zhuǎn)換完畢。(2)編碼通過分析我們可以編寫以下代碼實現(xiàn)功能:9.3.3項目實施《JAVA程序設(shè)計》課程9.3
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年耐腐蝕泵項目規(guī)劃申請報告
- 2025年纖維增強項目立項申請報告
- 2025年石棉纖維及其制品項目申請報告
- 2025年河南中豫國際港務(wù)集團有限公司招聘考試筆試試題(含答案)
- 2025年安徽淮南經(jīng)濟技術(shù)中等專業(yè)學(xué)校招聘考試筆試試題(含答案)
- 編鐘教學(xué)課件
- 文庫發(fā)布:稅務(wù)局課件
- six單詞教學(xué)課件
- 整形外科基本技術(shù)課件
- 暖通工程行業(yè)現(xiàn)狀分析報告及未來五至十年發(fā)展趨勢
- 天翼云從業(yè)者認證考試題庫
- 中國風(fēng)中醫(yī)藥文化PPT模板
- 2022-2023學(xué)年廣西北海市七年級(下)期末地理試卷(含解析)
- 醫(yī)院戰(zhàn)略管理如何制定醫(yī)院戰(zhàn)略規(guī)劃講座
- 部編版語文二年級下冊第4單元童心童趣大單元整體作業(yè)設(shè)計
- SYB創(chuàng)業(yè)培訓(xùn)游戲模塊2課件
- 娛樂場所文明服務(wù)責(zé)任書
- 鋼結(jié)構(gòu)防腐油漆施工方案
- 第五講社會建設(shè)
- GB/T 35273-2020信息安全技術(shù)個人信息安全規(guī)范
- GB/T 20303.1-2006起重機司機室第1部分:總則
評論
0/150
提交評論