Java語(yǔ)言程序設(shè)計(jì)電子課件 第8章 文件和流_第1頁(yè)
Java語(yǔ)言程序設(shè)計(jì)電子課件 第8章 文件和流_第2頁(yè)
Java語(yǔ)言程序設(shè)計(jì)電子課件 第8章 文件和流_第3頁(yè)
Java語(yǔ)言程序設(shè)計(jì)電子課件 第8章 文件和流_第4頁(yè)
Java語(yǔ)言程序設(shè)計(jì)電子課件 第8章 文件和流_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JAVA語(yǔ)言程序設(shè)計(jì)8.1

File類8.2流的簡(jiǎn)介8.3字節(jié)流8.4字符流8.5文件流處理案例本章小結(jié)第八章文件和流教學(xué)目標(biāo):輸入/輸出處理是程序設(shè)計(jì)中非常重要的部分,JAVA程序設(shè)計(jì)使用流類進(jìn)行輸入/輸出處理。java.io包中提供了許多輸入流和輸出流類,以完成程序和外部設(shè)備的交互。教學(xué)重點(diǎn):掌握File類和文件管理掌握主要字節(jié)流與字符流的使用了解特殊字節(jié)流與字符流的使用第八章8.1.1基本知識(shí)1.文件的定義

文件是計(jì)算機(jī)中一種基本的數(shù)據(jù)存儲(chǔ)形式。在實(shí)際存儲(chǔ)數(shù)據(jù)時(shí),如果對(duì)于數(shù)據(jù)的讀/寫速度要求不是很高,存儲(chǔ)的數(shù)據(jù)量不是很大,則使用文件作為一種持久數(shù)據(jù)存儲(chǔ)的方式是比較好的選擇。2.File類JAVA中的文件管理包括獲取路徑,讀取或設(shè)置文件的各種屬性,文件和目錄操作,目錄遍歷等。JAVA對(duì)于文件的操作和管理都是通過(guò)File類來(lái)實(shí)現(xiàn)的。8.1

File類File類位于java.io包中,有3種構(gòu)造方法:1)File(String

pathname)通過(guò)將給定路徑名字符串轉(zhuǎn)換成抽象路徑名來(lái)創(chuàng)建一個(gè)新File對(duì)象,該方法可以創(chuàng)建一個(gè)文件也可以創(chuàng)建一個(gè)目錄。描述一個(gè)路徑時(shí),因?yàn)樽址癨”有轉(zhuǎn)義作用,所以需要用“\\”表示“\”。例如:Filed=newFile(”f:\\chapter8”);創(chuàng)建一個(gè)File對(duì)象d,指向f盤的chapter8目錄。Filef=newFile(”f:\\chapter8\\a.txt”);創(chuàng)建一個(gè)File對(duì)象f,指向f盤chapter8目錄下的a.txt文件。File類的構(gòu)造方法2)File(String

parent,String

child)根據(jù)parent路徑名字符串和child路徑名字符串創(chuàng)建一個(gè)新File實(shí)例。例如:Filef1=newFile(”f:\\chapter8”,”a.txt”);創(chuàng)建一個(gè)File對(duì)象f1,指向f盤chapter8目錄下的a.txt文件。3)File(File

parent,String

child)根據(jù)parent抽象路徑名和child路徑名字符串創(chuàng)建一個(gè)新File實(shí)例。例如:Filed=newFile(”f:\\chapter8”);Filef2=newFile(d,”a.txt”);創(chuàng)建一個(gè)File對(duì)象f2,指向d:\chapter8目錄下的文件a.txt。File類的構(gòu)造方法File類的常用方法importjava.io.*;publicclassExample8_1{ publicstaticvoidmain(String[]args){ Filef=newFile("f:\\chapter8","Example8_1.java"); System.out.println("文件名:"+f.getName()); System.out.println("文件路徑:"+f.getPath()); System.out.println("f1是否存在?"+f.exists()); }}【例8-1】創(chuàng)建File對(duì)象指向相應(yīng)磁盤下的文件,顯示文件信息。

File類的list()和listFile()方法都會(huì)返回當(dāng)前File對(duì)象下的所有文件或目錄,如果僅希望得到滿足某種條件的子目錄和文件清單,可以使用java.io包中的文件名過(guò)濾器類FilenameFilter,用來(lái)過(guò)濾不符合規(guī)格的文件名,并返回合格的文件。

使用FilenameFilter時(shí),要?jiǎng)?chuàng)建一個(gè)類實(shí)現(xiàn)FilenameFilter接口,實(shí)現(xiàn)該接口下的accept方法。classMyFilterimplementsFilenameFilter{privateStringtype;

//type為需要過(guò)濾的條件publicMyFilter(Stringtype){//構(gòu)造方法this.type=type;}publicbooleanaccept(Filedir,Stringname){//dir表示文件的當(dāng)前目錄,name表示文件名。。。。。。。。//此處代碼實(shí)現(xiàn)accecpt方法}}3.FilenameFilter類importjava.io.*;publicclassExample8_2{publicstaticvoidmain(String[]args)throwsException{ Filedir=newFile("d:\\chapter8");//定義目錄 MyFilterfilter=newMyFilter(".java");

//定義過(guò)濾方式,選擇以.java結(jié)尾的文件,以下逐個(gè)顯示文件 String[]files=dir.list(filter); inti=0; System.out.println("該目錄下有"+files.length+"個(gè)文件"); while(i<files.length){ System.out.println("第"+(i+1)+"個(gè)文件是:"+files[i]); i++; } }}【例8-2】返回當(dāng)前目錄下的所有以.java結(jié)尾的文件。classMyFilterimplementsFilenameFilter{privateStringtype;publicMyFilter(Stringtype){this.type=type;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(type);} }【例8-2】返回當(dāng)前目錄下的所有以.java結(jié)尾的文件。classMyFilterimplementsFilenameFilter{privateStringtype;publicMyFilter(Stringtype){this.type=type;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(type);} }【例8-2】返回當(dāng)前目錄下的所有以.java結(jié)尾的文件。【例8-3】創(chuàng)建磁盤文件d:\chapter8\a.txt,和d:\chapter8\b.txt,測(cè)試文件的各種屬性信息。importjava.io.*;//加載包publicclassExample8_3{ publicstaticvoidmain(String[]args){ Filepath=newFile("d:\\chapter8"); //通過(guò)轉(zhuǎn)義字符“\”定義路徑 path.mkdirs();//創(chuàng)建一個(gè)文件夾 Filefile1,file2; file1=newFile(path,"a.txt");//定義文件a.txt file2=newFile(path,"b.txt"); //定義文件b.txt try{ //createNewFile()方法需強(qiáng)制異常處理,使用try……catch進(jìn)行處理。 file1.createNewFile();//創(chuàng)建文件a.txt file2.createNewFile();//創(chuàng)建文件b.txt } catch(IOExceptione){ System.out.println("注意:創(chuàng)建文件出錯(cuò)??!"); } System.out.println("文件創(chuàng)建成功"); showFileMessage(file1,file2);//調(diào)用方法顯示文件信息 showDirectoryMessage(file1,file2,path); //調(diào)用方法顯示目錄信息 }

publicstaticvoidshowFileMessage(Filefile1,Filefile2){

System.out.println("文件"+file1.getName()+"可讀么?"+file1.canRead());

System.out.println("文件"+file1.getName()+"可寫么?"+file1.canWrite());

System.out.println("文件"+file1.getName()+"存在么?"+file1.exists());

System.out.println("文件"+file1.getName()+"是文件么?"+file1.isFile());

System.out.println("文件"+file1.getName()+"的絕對(duì)路徑是:"+file1.getAbsolutePath());

System.out.println("文件"+file1.getName()+"的父目錄是:"+file1.getParent());

System.out.println("文件"+file1.getName()+"是目錄嗎?"+file1.isDirectory());

System.out.println("文件"+file1.getName()+"是文件么?"+file1.isFile());

System.out.println("文件"+file1.getName()+"最后被修改的時(shí)間是:"+file1.lastModified());

System.out.println("文件"+file1.getName()+"的長(zhǎng)度是:"+file1.length());

System.out.println("文件"+file2.getName()+"的長(zhǎng)度是:"+file2.length());}publicstaticvoidshowDirectoryMessage(Filefile1,Filefile2,Filepath){ System.out.println("文件path的名字是:"+path.getName());//獲得文件夾的名字 System.out.println("文件path的路徑名是"+path.getPath());//獲得文件夾所屬路徑的名字 //以下依次顯示目錄中文件的名字 Stringlt[]=newString[10]; inti=0; lt=path.list(); while(i<lt.length){ System.out.println("第"+(i+1)+"個(gè)文件是:"+lt[i]); i++; } }}

本節(jié)中使用File類創(chuàng)建的File對(duì)象,不會(huì)影響到真實(shí)的文件系統(tǒng),只是在對(duì)象與真實(shí)的文件或目錄之間建立一個(gè)關(guān)聯(lián)。在上述案例中,a.txt和b.txt通過(guò)createNewFile()方法已經(jīng)真實(shí)創(chuàng)建在f盤的chapter8文件夾下了,所以在調(diào)用方法file1.exists()時(shí)顯示的是true,即文件存在。如果在上述程序中,使用如下語(yǔ)句Filefile3=newFile(path,"c.txt");System.out.println(file3.exit());由于File類創(chuàng)建了一個(gè)抽象文件“c.txt”,此文件并沒有在硬盤上真實(shí)存在,所以輸出的結(jié)果為false。8.1.2知識(shí)擴(kuò)展什么是知識(shí)產(chǎn)權(quán)?知識(shí)產(chǎn)權(quán)的客體是人的智力成果,是一種無(wú)形資,保護(hù)知識(shí)產(chǎn)權(quán)體現(xiàn)了對(duì)人的智力成果的尊重。信息時(shí)代的競(jìng)爭(zhēng)就是科技與人才的競(jìng)爭(zhēng),而科技與人才的競(jìng)爭(zhēng)最終體現(xiàn)在知識(shí)產(chǎn)權(quán)的競(jìng)爭(zhēng)上,誰(shuí)掌握某一領(lǐng)域關(guān)鍵的知識(shí)產(chǎn)權(quán),誰(shuí)就能在這個(gè)領(lǐng)域取得控制權(quán)。作為計(jì)算機(jī)從業(yè)人員,既要尊重其他人的知識(shí)產(chǎn)權(quán),也要保護(hù)自己的知識(shí)產(chǎn)權(quán)。課后思考1.輸入流和輸出流

一個(gè)流是程序中數(shù)據(jù)所途徑的一條路徑。有些時(shí)候數(shù)據(jù)需要從數(shù)據(jù)源(如文件、內(nèi)存、磁盤)向程序中流動(dòng),這個(gè)流動(dòng)的通道稱為輸入流;

而有些時(shí)候,數(shù)據(jù)需要從程序流向目的地(文件、內(nèi)存、控制臺(tái)),這個(gè)流動(dòng)的通道稱為輸出流。8.2流的簡(jiǎn)介1.輸入流和輸出流

一個(gè)流是程序中數(shù)據(jù)所途徑的一條路徑。有些時(shí)候數(shù)據(jù)需要從數(shù)據(jù)源(如文件、內(nèi)存、磁盤)向程序中流動(dòng),這個(gè)流動(dòng)的通道稱為輸入流;

而有些時(shí)候,數(shù)據(jù)需要從程序流向目的地(文件、內(nèi)存、控制臺(tái)),這個(gè)流動(dòng)的通道稱為輸出流。8.2流的簡(jiǎn)介Java技術(shù)支持流中兩種類型的數(shù)據(jù):字節(jié)和字符。1.字節(jié)流按字節(jié)處理數(shù)據(jù),字符流按字符處理數(shù)據(jù)。2.字節(jié)輸入流由InputStream類及其子類實(shí)現(xiàn),字節(jié)輸出流由OutputStream類及其子類實(shí)現(xiàn);3.字符輸入流由Reader及其子類實(shí)現(xiàn),字符輸出流由Writer及其子類實(shí)現(xiàn)。標(biāo)準(zhǔn)輸入輸出是指在命令行下的輸入輸出方式,Java.lang包中的System類實(shí)現(xiàn)了標(biāo)準(zhǔn)輸入輸出功能。用鍵盤輸入數(shù)據(jù)是標(biāo)準(zhǔn)輸入;將數(shù)據(jù)顯示在屏幕上是標(biāo)準(zhǔn)輸出;以屏幕為對(duì)象的標(biāo)準(zhǔn)錯(cuò)誤輸出。2.標(biāo)準(zhǔn)輸入輸出System.in表示標(biāo)準(zhǔn)輸入流,默認(rèn)的數(shù)據(jù)源為鍵盤,它是InputStream類的一個(gè)對(duì)象,使用以下的兩個(gè)read方法可以從鍵盤讀入數(shù)據(jù)。1)intread()此方法將讀入的一個(gè)字節(jié)作為整數(shù)返回,如果沒有字節(jié),返回-1。2)intread(byte[]b)此方法讀入若干字節(jié)到字節(jié)數(shù)組b中,返回實(shí)際讀入的字節(jié)數(shù)。這兩個(gè)read方法均拋出IOException異常,編寫程序時(shí)要特別注意,將方法用try……catch語(yǔ)句處理異常,或者使用throws語(yǔ)句轉(zhuǎn)移異常。(1)標(biāo)準(zhǔn)輸入流System.out表示標(biāo)準(zhǔn)輸出流,默認(rèn)的目的地是屏幕。它是PrintStream類的一個(gè)對(duì)象,使用以下的兩個(gè)方法向屏幕輸出數(shù)據(jù)。1)voidprint(輸出參數(shù))輸出一行數(shù)據(jù)2)voidprintln(輸出參數(shù))輸出一行數(shù)據(jù)并換行(2)標(biāo)準(zhǔn)輸出流System.out表示標(biāo)準(zhǔn)輸出流,默認(rèn)的目的地是屏幕。它是PrintStream類的一個(gè)對(duì)象,使用以下的兩個(gè)方法向屏幕輸出數(shù)據(jù)。1)voidprint(輸出參數(shù))輸出一行數(shù)據(jù)2)voidprintln(輸出參數(shù))輸出一行數(shù)據(jù)并換行(3)標(biāo)準(zhǔn)錯(cuò)誤輸出流System.err表示標(biāo)準(zhǔn)錯(cuò)誤輸出流,默認(rèn)的目的地是屏幕。它是PrintStream類的一個(gè)對(duì)象,程序可通過(guò)它輸出運(yùn)行時(shí)的錯(cuò)誤信息。(2)標(biāo)準(zhǔn)輸出流importjava.io.*;publicclassExample8_4{publicstaticvoidmain(String[]args){charc;System.out.println("請(qǐng)輸入一個(gè)字符:");try{c=(char)System.in.read();

//從鍵盤讀入一個(gè)字節(jié),將該字節(jié)轉(zhuǎn)換成字符形式,然后輸出。

System.out.print("您輸入的字符是:"+c);//向屏幕輸出 }catch(IOExceptione){System.out.println("產(chǎn)生異常"); }}}【例8-4】使用標(biāo)準(zhǔn)輸入輸出流從鍵盤輸入一個(gè)字符顯示在控制臺(tái)上。importjava.io.*;publicclassExample8_5{publicstaticvoidmain(String[]args){intb;System.out.println("請(qǐng)輸入字符");try{while((b=System.in.read())!=-1){//通過(guò)while循環(huán)控制輸入流到結(jié)尾。

System.out.print(""+(char)b);

} }catch(IOExceptione){System.out.println("輸入輸出錯(cuò)誤");}}}【例8-5】從鍵盤輸入一系列字符,顯示在控制臺(tái)上。字節(jié)流是由字節(jié)組成的,也就是說(shuō)在這個(gè)通道中流動(dòng)的都是字節(jié)數(shù)據(jù)。它是Java中最基本的流,主要處理二進(jìn)制數(shù)據(jù)。抽象類InputStream和OutputStream是所有Java字節(jié)流的父類。8.3字節(jié)流字節(jié)流是由字節(jié)組成的,也就是說(shuō)在這個(gè)通道中流動(dòng)的都是字節(jié)數(shù)據(jù)。它是Java中最基本的流,主要處理二進(jìn)制數(shù)據(jù)。抽象類InputStream和OutputStream是所有Java字節(jié)流的父類。8.3字節(jié)流InputStream和OutputStream是字節(jié)輸入流、字節(jié)輸出流的父類,是抽象類,不能創(chuàng)建對(duì)象,沒有構(gòu)造方法.InputStream字節(jié)輸入流OutputStream字節(jié)輸出流字節(jié)輸入流和字節(jié)輸出流的所有方法均拋出IOException異常使用字節(jié)輸入輸出流處理數(shù)據(jù)時(shí),通常使用他們的子類。8.3.1字節(jié)流的父類1.FileInputStream文件字節(jié)輸入流

FileInputStream是InputStream類派生出來(lái)的簡(jiǎn)單輸入類,使用它可從文件系統(tǒng)的某個(gè)文件中獲取字節(jié),用于讀取諸如圖像數(shù)據(jù)之類的原始字節(jié)流。8.3.2文件字節(jié)流importjava.io.*;publicclassExample8_6{publicstaticvoidmain(String[]args){byteb[]=newbyte[1024];//定義緩沖字節(jié)數(shù)組 try{ Filef=newFile("d:\\chapter8","Example8_6.java");

//創(chuàng)建一個(gè)文件FileInputStreamin=newFileInputStream(f);

//創(chuàng)建文件的字節(jié)輸入流 intn=0; while((n=in.read(b))!=-1){

//按照數(shù)組長(zhǎng)度讀取文件,直至結(jié)尾 System.out.println(newString(b));

//轉(zhuǎn)成字符串后顯示 } in.close(); }catch(IOExceptione){ e.printStackTrace(); }}}【例8-6】從磁盤上讀取文件,顯示在控制臺(tái)。FileOutputStream是OutputStream類派生出來(lái)的簡(jiǎn)單輸出類,2.FileOutputStream文件字節(jié)輸出流importjava.io.*;publicclassExample8_7{publicstaticvoidmain(String[]args){byteb[]=newbyte[512]; System.out.println("請(qǐng)輸入一行字符,按回車鍵結(jié)束:"); try{ System.in.read(b);//將鍵盤輸入的字符存入字節(jié)緩沖數(shù)組b中 Filef=newFile("d:\\chapter8","file.txt"); FileOutputStreamout=newFileOutputStream(f);//輸出流 out.write(b);//通過(guò)流將數(shù)組中內(nèi)容寫入文件file.txt }catch(IOExceptione){ e.printStackTrace(); }}}【例8-7】將鍵盤輸入的內(nèi)容保存到d:\chapter8\file.txt中。1.數(shù)據(jù)流DataInputStream和DataOutputStream類創(chuàng)建的對(duì)象被稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流。DataInputStream類專門負(fù)責(zé)讀取DataOutputStream輸出的數(shù)據(jù)。它們?cè)试S應(yīng)用程序與以機(jī)器無(wú)關(guān)的方式讀取java原始數(shù)據(jù)。也就是說(shuō)。當(dāng)讀取一個(gè)數(shù)據(jù)時(shí),不用再關(guān)心這個(gè)數(shù)據(jù)應(yīng)當(dāng)是多少個(gè)字節(jié)。8.3.3其他字節(jié)流2.字節(jié)數(shù)組流流的來(lái)源或目的地并不一定是文件,也可以是內(nèi)存中的一塊空間,例如一個(gè)字節(jié)數(shù)組。ByteArrayInputStream和ByteArrayOutputStream就是分別使用字節(jié)數(shù)組作為數(shù)據(jù)源和目的地。8.3.3其他字節(jié)流3.對(duì)象流ObjectInputStream和ObjectOutputStream這兩個(gè)類,用于從底層輸入流中讀取對(duì)象類型的數(shù)據(jù)和將對(duì)象類型的數(shù)據(jù)寫入到底層輸入流。ObjectInputStream通常分別與FileInputStream一起使用,ObjectOutputStream通常分別與FileOutputStream一起使用,為應(yīng)用程序提供對(duì)對(duì)象和圖形的持久存儲(chǔ)?!纠?-11】編寫程序,產(chǎn)生10個(gè)100以內(nèi)的隨機(jī)數(shù),保存在d:\chapter8\number.txt

文件中。

將該文件備份到D盤下,目錄為d:\backup,文件名不變。將復(fù)制后的文件顯示在屏幕上。信息時(shí)代,使用一個(gè)新的網(wǎng)站或者手機(jī)下載了一個(gè)新的APP,或者買了一部新手機(jī)、一臺(tái)新電腦,通常要做的第一件事是什么?注冊(cè)or登錄?現(xiàn)如今,實(shí)名制的不斷發(fā)展,人們對(duì)于注冊(cè)賬號(hào)過(guò)程中填寫個(gè)人身份信息已經(jīng)習(xí)以為常,但是,一旦這些信息遭到泄露,將會(huì)怎樣?FACEBOOK信息泄露門再次給我們敲響了警鐘!2018年3月中旬,《紐約時(shí)報(bào)》等媒體揭露稱一家服務(wù)特朗普競(jìng)選團(tuán)隊(duì)的數(shù)據(jù)分析公司CambridgeAnalytica獲得了Facebook數(shù)千萬(wàn)用戶的數(shù)據(jù),并進(jìn)行違規(guī)濫用。4月6日,歐盟聲稱Facebook確認(rèn)270萬(wàn)歐洲人的數(shù)據(jù)被不當(dāng)共享。安全和便捷,在很多時(shí)候是一對(duì)伴生的矛盾體,提高互聯(lián)網(wǎng)安全意識(shí),對(duì)每一個(gè)用戶來(lái)說(shuō)都很有必要。作為IT行業(yè)的從業(yè)者,更應(yīng)該尊重?cái)?shù)據(jù),尊重安全,尊重隱私。課后思考:科技發(fā)展中如何保證信息的安全性?字符流是由兩個(gè)字節(jié)的字符為單位組成的,也就是說(shuō)在這個(gè)通道中流動(dòng)的都是字符數(shù)據(jù)。抽象類Reader和Writer是所有java字符流的父類,8.4字符流Reader和Writer是字符輸入流、字符輸出流的父類,是抽象類,不能創(chuàng)建對(duì)象,所以沒有構(gòu)造方法,本小節(jié)將介紹Reader和Writer類的主要方法。1.Reader字符輸入流8.4.1字符流父類2.Writer字符輸出流1.FileReader文件字符輸入流FileInputStream使用字節(jié)讀取文件,字節(jié)流不能直接操作Unicode字符,由于漢字在文件中占兩個(gè)字節(jié),如果使用字節(jié)流讀取不當(dāng)會(huì)出現(xiàn)亂碼現(xiàn)象,采用字符流就可以避免這種情況。Java提供了與之對(duì)應(yīng)的文件字符輸入流FileReader。8.4.2文件字符流FileWriter是Writer類的子類,2.FileWriter件字符輸出流importjava.io.*;publicclassExample8_12{publicstaticvoidmain(String[]args){charc[]=newchar[1024];//定義緩沖字符數(shù)組 try{ Filef=newFile("d:\\chapter8","Example8_12.java");//創(chuàng)建一個(gè)文件FileReaderin=newFileReader(f);//創(chuàng)建文件的字符輸入流 intn=0; while((n=in.read(c))!=-1){//按照數(shù)組長(zhǎng)度讀取文件,直至結(jié)尾 System.out.println(newString(c));//轉(zhuǎn)成字符串后顯示 } in.close(); }catch(IOExceptione){ e.printStackTrace(); }}}【例8-12】改寫【例8-6】,使用FileReader從磁盤上讀取文件,顯示在控制臺(tái)。1.緩沖流8.4.3其他字符流importjava.io.*;publicclassExample8_13{ publicstaticvoidmain(String[]args){ FileReaderfr=null; FileWriterfw=null;BufferedReaderbr=null;Strings=null;BufferedWriterbw=null;try{fr=newFileReader("d:\\chapter8\\Example8_13.java");fw=newFileWriter("d:\\chapter8\\Example8_13.txt");br=newBufferedReader(fr);bw=newBufferedWriter(fw);while((s=br.readLine())!=null){ bw.write(s);//這里調(diào)用newline()方法是讓它輸出和讀取的完全一致 bw.newLine();}}【例8-13】將本程序復(fù)制到d:\chapter8\Example8_13.txt中。catch(FileNotFoundExceptionex){System.out.println("找不到指定文件?。?);}catch(IOExceptione){System.out.println("文件讀取有誤!");}finally{try{ bw.close();br.close();}catch(IOExceptionex){System.out.println(ex.getMessage());}} }}2.字節(jié)字符轉(zhuǎn)換流很多的文本文件會(huì)有不同的編碼格式,造成這種編碼差異的可能是系統(tǒng)的差異,可能是在保存文件時(shí)采用不同字符集編碼的差異。當(dāng)我們利用Java語(yǔ)言來(lái)打開這些文本時(shí),如果不使用正確的字符集解碼器打開,肯定會(huì)出現(xiàn)亂碼。java.io包提供的InputStreamReader類和OutputStreamWriter類來(lái)支持指定文本字符集編碼,以正確顯示文本。importjava.io.*;publicclassExample8_14{publicstaticvoidmain(String[]args){ BufferedReaderbufreader=null; try{

System.out.println("回聲測(cè)試開始:");

bufreader=newBufferedReader(newInputStreamReader(System.in)); Strings; intn; while(true){ s=bufreader.readLine(); if(s.equals(""))break;//當(dāng)輸入的是空行時(shí),結(jié)束回聲 System.out.println(s); } bufreader.close(); }catch(IOExceptione){ e.printStackTrace(); } }}【例8-14】編寫一個(gè)回聲程序,在控制臺(tái)輸入一行,回車后緊接著顯示該行,直到在新行敲入回車為止。importjava.io.*;publicclassExample8_15{ publicstaticvoidmain(Stringargs[]){ Filef=null; BufferedReaderbr=null; BufferedWriterbw=null; FileWriterfw=null; Strings=null; try{ System.out.println("請(qǐng)?jiān)诖颂庉斎胛淖郑?); br=newBufferedReader(newInputStreamReader(System.in)); f=newFile("f:\\chapter8","source.txt"); fw=newFileWriter(f); bw=newBufferedWriter(fw); while((s=br.readLine())!=null){ bw.write(s);//這里調(diào)用newline()方法是讓它輸出和讀取的完全一致 bw.newLine();} bw.close(); br.close();//流必須要關(guān)閉,否則在保存的txt文件中沒有文字。 }catch(IOExceptione){ e.printStackTrace(); } }}【例8-15】將從控制臺(tái)輸入的若干行文字存入d:/chapter8的source.txt中,如果沒有source.txt則創(chuàng)建,否則覆蓋。除了上述所講的各種字節(jié)輸入輸出流派生的子類外,還有以下幾種輸入輸出流。1.CharArrayReader和CharArrayWriterCharArrayReader類從內(nèi)存中的字符數(shù)組中讀取字符,因此它的數(shù)據(jù)源是一個(gè)字符數(shù)組。CharArrayWriter類把字符寫到內(nèi)存中的字符數(shù)組中,它的目的地是一個(gè)字符數(shù)組。2.PushBackReaderPushBackReader類允許一個(gè)或多個(gè)字符被送回輸入流,以便于對(duì)輸入流進(jìn)行預(yù)測(cè)。程序中一般很少用它。3.PrintWriterPrintWriter是PrintStream的字符形式的版本,能輸出格式化的數(shù)據(jù),兩者的寫數(shù)據(jù)的方法相似。8.4.4知識(shí)擴(kuò)展“黑客”,以盜取他人信息,竊取商業(yè)秘密作為自己技術(shù)高超的證明,完全意識(shí)不到這是一種違法行為。作為未來(lái)計(jì)算機(jī)從業(yè)人員,學(xué)習(xí)技術(shù)是為了更好的保護(hù)信息,保護(hù)軟件和互聯(lián)網(wǎng)的使用者,自覺地維護(hù)網(wǎng)絡(luò)信息的安全秩序。課后思考:如何提高網(wǎng)絡(luò)信息安全意識(shí)?在上一章編寫一個(gè)網(wǎng)絡(luò)通信工具程序的界面。首先用戶先進(jìn)行登錄,顯示當(dāng)前在線的用戶,雙擊某個(gè)用戶名,可以與該用戶互相發(fā)送信息。在QQ的聊天工具中,是可以查看聊天記錄的,也就

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論