




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java面向?qū)ο蟪绦蛟O(shè)計(jì)1JavaI/O操作概念JavaI/O類(lèi)JavaI/O操作標(biāo)準(zhǔn)輸入/輸出文件讀寫(xiě)操作文件、目錄管理隨機(jī)訪(fǎng)問(wèn)文件2概念I(lǐng)/O來(lái)源控制臺(tái)(console,如DOS窗口)打印/讀入文件(file)讀/寫(xiě)網(wǎng)絡(luò)接口(TCP/UDP端口)讀/寫(xiě)針對(duì)數(shù)據(jù)的讀寫(xiě)以流(stream)的方式對(duì)數(shù)據(jù)進(jìn)行操作數(shù)據(jù)源程序讀出數(shù)據(jù)流目的程序?qū)懭霐?shù)據(jù)流流的重要特性順序讀/寫(xiě)sequentially3概念讀/寫(xiě)流的一般流程讀(Reading)openastream//打開(kāi)讀出流whilemoreinformation//判斷
readinformation//讀closethestream//關(guān)閉流寫(xiě)(Writing)openastream//打開(kāi)寫(xiě)入流whilemoreinformation//判斷
writeinformation//寫(xiě)closethestream//關(guān)閉流4概念輸入/輸出流可以從以下幾個(gè)方面進(jìn)行分類(lèi)從流的方向劃分輸入流輸出流從流的分工劃分節(jié)點(diǎn)流處理流從流的內(nèi)容劃分面向字符的流面向字節(jié)的流5概念兩種流的定義(讀取信息的基本數(shù)據(jù)單位)字節(jié)流(bytestream):一個(gè)字節(jié)(8-bit)一個(gè)字節(jié)讀/寫(xiě),用于一般目的字符流(characterstream):一個(gè)字符一個(gè)字符讀/寫(xiě)(具有特定字符編碼的數(shù)據(jù)),專(zhuān)門(mén)用于字符數(shù)據(jù)java語(yǔ)言6A617661D3EFD1D4以字節(jié)流的方式讀:讀8次,8個(gè)字節(jié)以字符流的方式讀:讀6次,6個(gè)字符6JavaI/O操作概念JavaI/O類(lèi)JavaI/O操作標(biāo)準(zhǔn)輸入/輸出文件讀寫(xiě)操作目錄管理隨機(jī)訪(fǎng)問(wèn)文件文件屬性7JavaI/O類(lèi)字符流的讀/寫(xiě)操作(來(lái)自JDK1.1)java.io.Reader(抽象類(lèi))publicintread()publicint
read(char
cbuf[])publc
abstract
int
read(char
cbuf[],intoffset,intlength)到達(dá)流的終點(diǎn),無(wú)數(shù)據(jù)讀出則返回-1java.io.Writer(抽象類(lèi))publicvoidwrite(intc)publicvoidwrite(char
cbuf[])publicabstractvoidwrite(char
cbuf[],intoffset,intlength)所有的讀/寫(xiě)函數(shù)都拋出java.io.IOException8JavaI/O類(lèi)針對(duì)字符數(shù)據(jù)的特點(diǎn)進(jìn)行過(guò)優(yōu)化,提供一些面向字符的有用特性源或目標(biāo)通常是文本文件實(shí)現(xiàn)內(nèi)部格式和文本文件中的外部格式之間轉(zhuǎn)換它們的子類(lèi)又可分為兩大類(lèi)節(jié)點(diǎn)流:從數(shù)據(jù)源讀入數(shù)據(jù)或往目的地寫(xiě)出數(shù)據(jù)處理流:對(duì)數(shù)據(jù)執(zhí)行某種處理多數(shù)程序使用這兩個(gè)抽象類(lèi)的一系列子類(lèi)來(lái)讀入/寫(xiě)出文本信息例如FileReader/FileWriter用來(lái)讀/寫(xiě)文本文件9I/O字符流的層次關(guān)系陰影部分為節(jié)點(diǎn)流,其余為處理流10JavaI/O類(lèi)字節(jié)流的讀/寫(xiě)操作(來(lái)自JDK1.0)java.io.InputStream(抽象類(lèi))publicabstract
intread()publicint
read(byteb[])publicint
read(byteb[],intoffset,intlength)到達(dá)流的終點(diǎn),無(wú)數(shù)據(jù)讀出則返回-1java.io.OutputStream(抽象類(lèi))publicabstractvoidwrite(intb)publicvoidwrite(byteb[])publicvoidwrite(byteb[],intoffset,intlength)所有的讀/寫(xiě)函數(shù)都拋出java.io.IOException11JavaI/O類(lèi)字節(jié)流使用范圍:數(shù)據(jù)源或目標(biāo)中含有非字符數(shù)據(jù),必須用字節(jié)流來(lái)輸入/輸出通常被用來(lái)讀寫(xiě)諸如圖片、聲音之類(lèi)的二進(jìn)制數(shù)據(jù)絕大多數(shù)數(shù)據(jù)是被存儲(chǔ)為二進(jìn)制文件的,世界上的文本文件大約只能占到2%,通常二進(jìn)制文件要比含有相同數(shù)據(jù)量的文本文件小得多12JavaI/O類(lèi)字節(jié)流的層次關(guān)系13JavaI/O類(lèi)14JavaI/O類(lèi)I/O流的分類(lèi)(12個(gè)功能類(lèi))I/O類(lèi)型所用到的類(lèi)描述文件FileReader/FileWriterFileInputStream/FileOutputStream文件流(讀/寫(xiě)文件)緩沖BufferedReader/BufferedWriterBufferedInputStream/BufferedOutputStream提高讀/寫(xiě)效率打印PrintWriter
PrintStream
(System.out.println())內(nèi)存CharArrayReader/CharArrayWriterByteArrayInputStreamByteArrayOutputStreamStringReader/StringWriterStringBufferInputStream讀/寫(xiě)內(nèi)存15JavaI/O類(lèi)I/O流的分類(lèi)(12個(gè)功能類(lèi))I/O類(lèi)型所用到的類(lèi)描述字節(jié)流和字符流的轉(zhuǎn)換InputStreamReaderOutputStreamWriter將InputStream中讀入的字節(jié)轉(zhuǎn)為字符/將字符轉(zhuǎn)為字節(jié)寫(xiě)入OutputStream管道pipePipedReader/PipedWriterPipedInputStream/PipedOutputStream文件流(讀/寫(xiě)文件)連接ConcatenationSequenceInputStream多個(gè)輸入流連接為一個(gè)輸入流對(duì)象串行化ObjectInputStreamObjectOutputStreamObjectSerialization16JavaI/O類(lèi)I/O流的分類(lèi)(12個(gè)功能類(lèi))I/O類(lèi)型所用到的類(lèi)描述基本數(shù)據(jù)轉(zhuǎn)化DataInputStreamDataOutputStreamJAVA基本數(shù)據(jù)類(lèi)型的讀/寫(xiě)計(jì)數(shù)LineNumberReaderLineNumberInputStream讀操作時(shí)記錄行數(shù)PeekingAheadPushbackReaderPushbackInputStream可回退緩存(pushbackbuffer)過(guò)濾FilterReader/FilterWriterFilterInputStream/FilterOutputStream在讀/寫(xiě)操作時(shí)對(duì)數(shù)據(jù)進(jìn)行過(guò)濾17JavaI/O操作概念JavaI/O類(lèi)JavaI/O操作標(biāo)準(zhǔn)輸入/輸出文件讀寫(xiě)操作目錄管理隨機(jī)訪(fǎng)問(wèn)文件文件屬性18輸出:控制臺(tái)屏幕打印publicclassTest{ publicstaticvoidmain(Stringargs[]){
System.out.println("HelloWorld!"); }}標(biāo)準(zhǔn)輸入/輸出staticPrintStreamout;19輸入:鍵盤(pán)讀入importjava.io.IOException;classTest{ publicstaticvoidmain(Stringargs[])throws
IOException{ byte[]b=newbyte[10];
System.out.println("接收到的字符個(gè)數(shù)="+
System.in.read(b));
System.out.println("接收到的字符是"+newString(b)); }}標(biāo)準(zhǔn)輸入/輸出staticInputStreamin;20標(biāo)準(zhǔn)輸入/輸出標(biāo)準(zhǔn)輸入輸出流對(duì)象System類(lèi)的靜態(tài)成員變量包括System.in:InputStream類(lèi)型的,代表標(biāo)準(zhǔn)輸入流,這個(gè)流是已經(jīng)打開(kāi)了的,默認(rèn)狀態(tài)對(duì)應(yīng)于鍵盤(pán)輸入。System.out:PrintStream類(lèi)型的,代表標(biāo)準(zhǔn)輸出流,默認(rèn)狀態(tài)對(duì)應(yīng)于屏幕輸出。System.err:PrintStream類(lèi)型的,代表標(biāo)準(zhǔn)錯(cuò)誤信息輸出流,默認(rèn)狀態(tài)對(duì)應(yīng)于屏幕輸出。21文件讀/寫(xiě)流程打開(kāi)文件流條件判斷讀出/寫(xiě)入關(guān)閉文件流兩種類(lèi)型文件FileReader/FileWriter(字符流)FileInputStream/FileOutputStream(字節(jié)流)文件讀寫(xiě)操作22文件讀寫(xiě)操作寫(xiě)文本文件FileWriter類(lèi)創(chuàng)建一個(gè)磁盤(pán)文件關(guān)閉一個(gè)磁盤(pán)文件write()方法捕獲I/O異常BufferedWriter
類(lèi)23文件讀寫(xiě)操作字符流構(gòu)造方法publicFileReader(Filefile)throwsFileNotFoundExceptionpublicFileReader(String
fileName)throwsFileNotFoundExceptionpublicFile(Stringpathname)publicFileWriter(Filefile)throwsIOExceptionpublicFileWriter(Filefile,booleanappend)throwsIOExceptionpublicFileWriter(String
fileName)throwsIOExceptionpublicFileWriter(String
fileName,booleanappend)throwsIOException24文件讀寫(xiě)操作在C盤(pán)根目錄創(chuàng)建文本文件Hello.txt,并往里寫(xiě)入若干行文本importjava.io.*;classTest{publicstaticvoidmain(String[]args)throwsIOException{//main方法中聲明拋出IO異常
StringfileName="C:\\Hello.txt";
FileWriter
writer=newFileWriter(fileName
);
writer.write("Hello!\n");
writer.write("Thisismyfirsttextfile,\n");
writer.write("Youcanseehowthisisdone.\n");
writer.write("輸入一行中文也可以\n");
writer.close();
}}25文件讀寫(xiě)操作打開(kāi)C盤(pán)根目錄下的Hello.txt文件換行有些問(wèn)題,下面例子中將解決這個(gè)問(wèn)題26文件讀寫(xiě)操作每次運(yùn)行這個(gè)程序,都將刪除已經(jīng)存在的”Hello.txt”文件,創(chuàng)建一個(gè)新的同名文件FileWriter的構(gòu)造方法有五個(gè),本例是通過(guò)一個(gè)字符串指定文件名來(lái)創(chuàng)建FileWriter類(lèi)的write方法向文件中寫(xiě)入字符Writer類(lèi)的流可實(shí)現(xiàn)內(nèi)部格式到外部磁盤(pán)文件格式的轉(zhuǎn)換“Hello.txt”是一個(gè)普通的ASCII碼文本文件,每個(gè)英文字符占一個(gè)字節(jié),中文字符占兩個(gè)字節(jié)Java程序中的字符串則是每個(gè)字符占兩個(gè)字節(jié)的,采用Unicode編碼
close方法清空流里的內(nèi)容并關(guān)閉它。如果不調(diào)用該方法,可能系統(tǒng)還沒(méi)有完成所有數(shù)據(jù)的寫(xiě)操作,程序就結(jié)束了27文件讀寫(xiě)操作處理IO異常importjava.io.*;classEx6_3{publicstaticvoidmain(String[]args){StringfileName="c:\\Hello.txt";
try{//將所有IO操作放入try塊中
FileWriterwriter=newFileWriter(fileName,true);
writer.write("Hello!\n");
writer.write("Thisismyfirsttextfile,\n");
writer.write("Youcanseehowthisisdone.\n");
writer.write("輸入一行中文也可以\n");
writer.close();
}catch(IOException
iox){
System.out.println("Problemwriting"+fileName);}
}}運(yùn)行此程序,會(huì)發(fā)現(xiàn)在原文件內(nèi)容后面又追加了重復(fù)的內(nèi)容,這就是將構(gòu)造方法的第二個(gè)參數(shù)設(shè)為true的效果28文件讀寫(xiě)操作BufferedWriter類(lèi)(處理流)如果需要寫(xiě)入的內(nèi)容很多,就應(yīng)該使用更為高效的緩沖器流類(lèi)BufferedWriterFileWriter和BufferedWriter類(lèi)都用于輸出字符流,包含的方法幾乎完全一樣,但BufferedWriter多提供了一個(gè)newLine()方法用于換行不同廠家生產(chǎn)的計(jì)算機(jī)(IBM,Apple,VAX,Sun)對(duì)文字的換行方法不同。newLine()方法可以輸出在當(dāng)前計(jì)算機(jī)上正確的換行符構(gòu)造方法:publicBufferedWriter(Writerout)8192bytepublicBufferedWriter(Writerout,intsize)29文件讀寫(xiě)操作使用BufferedWriter完成前面例子實(shí)現(xiàn)的功能importjava.io.*;classEx6_4{ publicstaticvoidmain(String[]args)throwsIOException { StringfileName="C:/newHello.txt";
BufferedWriter
out=newBufferedWriter(newFileWriter(fileName));
out.write("Hello!");
out.newLine();
out.write("ThisisanothertextfileusingBufferedWriter,");
out.newLine();;
out.write("SoIcanuseacommonwaytostartanewline");
out.close();}}30文件讀寫(xiě)操作用任何文本編輯器打開(kāi)newHello.txt都會(huì)出現(xiàn)正確的換行效果31文件讀寫(xiě)操作讀文本文件FileReader類(lèi)從文本文件中讀取字符繼承自Reader抽象類(lèi)的子類(lèi)InputStreamReaderBufferedReader讀文本文件的緩沖器類(lèi)具有readLine()方法,可以對(duì)換行符進(jìn)行鑒別,一行一行地讀取輸入流中的內(nèi)容繼承自Reader文件輸入方法:BufferedReaderin=newBufferedReader(new
FileReader(fileName));
32文件讀寫(xiě)操作從Hello.txt中讀取文本并顯示在屏幕上importjava.io.*;classTest{publicstaticvoidmain(String[]args){StringfileName="C:/Hello.txt",line;try{
BufferedReaderin=newBufferedReader(newFileReader(fileName));line=in.readLine();//讀取一行內(nèi)容
while(line!=null){
System.out.println(line); line=in.readLine(); }
in.close();}catch(IOException
iox){
System.out.println("Problemreading"+fileName);}}}33文件讀寫(xiě)操作運(yùn)行該程序,屏幕上將逐行顯示出Hello.txt文件中的內(nèi)容FileReader對(duì)象:創(chuàng)建后將打開(kāi)文件,如果文件不存在,會(huì)拋出一個(gè)IOExceptionBufferedReader類(lèi)的readLine()方法:從一個(gè)面向字符的輸入流中讀取一行文本。如果其中不再有數(shù)據(jù),返回nullReader類(lèi)的read()方法:也可用來(lái)判別文件結(jié)束。該方法返回的一個(gè)表示某個(gè)字符的int型整數(shù),如果讀到文件末尾,返回-1。據(jù)此,可修改本例中的讀文件部分:intc;while((c=in.read())!=-1)System.out.print((char)c);close()方法:為了操作系統(tǒng)可以更為有效地利用有限的資源,應(yīng)該在讀取完畢后,調(diào)用該方法34文件讀寫(xiě)操作例:指定源文件和目標(biāo)文件名,將源文件的內(nèi)容拷貝至目標(biāo)文件。調(diào)用方式為:javacopysourceFile
destinationFile35文件讀寫(xiě)操作importjava.io.*;classCopyMaker{StringsourceName,destName;
BufferedReadersource;
BufferedWriter
dest;Stringline;
privateboolean
openFiles(){ try{
source=newBufferedReader(new
FileReader(sourceName)); } catch(IOException
iox){
System.out.println("Problemopening"+sourceName);returnfalse;}try{
dest=newBufferedWriter(new
FileWriter(destName));
}catch(IOException
iox){
System.out.println("Problemopening"+destName);returnfalse;}returntrue;}36文件讀寫(xiě)操作privateboolean
copyFiles(){ try{ line=source.readLine();
while(line!=null){
dest.write(line);
dest.newLine();
line=source.readLine();
}}catch(IOException
iox){
System.out.println("Problemreadingorwriting");returnfalse;}returntrue;}37文件讀寫(xiě)操作privateboolean
closeFiles(){
boolean
retVal=true;try{source.close();}catch(IOException
iox){
System.out.println("Problemclosing"+sourceName);
retVal=false;}try{dest.close();}catch(IOException
iox){
System.out.println("Problemclosing"+destName);
retVal=false;}returnretVal;}38文件讀寫(xiě)操作
publicboolean
copy(String
src,Stringdst){
sourceName=src;
destName=dst;returnopenFiles()&©Files()&&closeFiles();}}publicclassCopy//一個(gè)文件中只能有一個(gè)公有類(lèi){ publicstaticvoidmain(String[]args){ if(args.length==2)newCopyMaker().copy(args[0],args[1]);else
System.out.println("PleaseEnterFilenames");}}39文件讀寫(xiě)操作寫(xiě)二進(jìn)制文件二進(jìn)制文件原則上講,所有文件都是由8位的字節(jié)組成的如果文件字節(jié)中的內(nèi)容應(yīng)被解釋為字符,則文件被稱(chēng)為文本文件;如果被解釋為其它含義,則文件被稱(chēng)為二進(jìn)制文件例如文字處理程序,例如字處理軟件Word產(chǎn)生的doc文件中,數(shù)據(jù)要被解釋為字體、格式、圖形和其他非字符信息。因此,這樣的文件是二進(jìn)制文件,不能用Reader流正確讀取為什么需要二進(jìn)制文件輸入輸出更快比文本文件小很多有些數(shù)據(jù)不容易被表示為字符40文件讀寫(xiě)操作抽象類(lèi)OutputStream派生類(lèi)FileOutputStream用于一般目的輸出(非字符輸出)用于成組字節(jié)輸出派生類(lèi)DataOutputStream具有寫(xiě)各種基本數(shù)據(jù)類(lèi)型的方法將數(shù)據(jù)寫(xiě)到另一個(gè)輸出流它在所有的計(jì)算機(jī)平臺(tái)上使用同樣的數(shù)據(jù)格式其常用的一些方法見(jiàn)下表其中size方法,可作為計(jì)數(shù)器,統(tǒng)計(jì)寫(xiě)入的字節(jié)數(shù)41文件讀寫(xiě)操作42文件讀寫(xiě)操作43文件讀寫(xiě)操作將三個(gè)int型數(shù)字255/0/-1寫(xiě)入數(shù)據(jù)文件data1.datimportjava.io.*;classTest{publicstaticvoidmain(String[]args){StringfileName="c:/data1.dat";
intvalue0=255,value1=0,value2=-1;try{
DataOutputStreamout=newDataOutputStream(newFileOutputStream(fileName));
out.writeInt(value0);
out.writeInt(value1);
out.writeInt(value2);
out.close();}catch(IOException
iox){
System.out.println("Problemwriting"+fileName);}}44文件讀寫(xiě)操作運(yùn)行結(jié)果運(yùn)行程序后,在C盤(pán)生成數(shù)據(jù)文件data1.dat用寫(xiě)字板打開(kāi)沒(méi)有任何顯示用ultraEdit打開(kāi)查看其二進(jìn)制信息,內(nèi)容為0000
00FF0000
00
00FFFF
FF
FF,每個(gè)int數(shù)字都是32個(gè)bit的說(shuō)明FileOutputStream類(lèi)的構(gòu)造方法負(fù)責(zé)打開(kāi)文件“data1.dat”用于寫(xiě)數(shù)據(jù)FileOutputStream類(lèi)的對(duì)象與DataOutputStream對(duì)象連接,寫(xiě)基本類(lèi)型的數(shù)據(jù)45文件讀寫(xiě)操作BufferedOutputStream寫(xiě)二進(jìn)制文件的緩沖流類(lèi)類(lèi)似于文本文件中的BufferedWriter對(duì)于大量數(shù)據(jù)的寫(xiě)入,可提高效率用法示例:DataOutputStreamout=new
DataOutputStream(newBufferedOutputStream(newFileOutputStream(fileName)));46文件讀寫(xiě)操作向文件中寫(xiě)入各種數(shù)據(jù)類(lèi)型的數(shù),并統(tǒng)計(jì)寫(xiě)入的字節(jié)數(shù)importjava.io.*;classEx6_8{publicstaticvoidmain(String[]args)throwsIOException{ StringfileName="mixedTypes.dat";
DataOutputStream
dataOut=newDataOutputStream(newBufferedOutputStream(newFileOutputStream(fileName)));
dataOut.writeInt(0);
System.out.println(dataOut.size()+"byteshavebeenwritten.");
dataOut.writeDouble(31.2);
System.out.println(dataOut.size()+"byteshavebeenwritten.");
dataOut.writeBytes("JAVA");
System.out.println(dataOut.size()+"byteshavebeenwritten.");
dataOut.close();}}47文件讀寫(xiě)操作運(yùn)行結(jié)果4byteshavebeenwritten12byteshavebeenwritten16byteshavebeenwritten說(shuō)明這個(gè)程序可作為字節(jié)計(jì)數(shù)器48文件讀寫(xiě)操作向文件中寫(xiě)入內(nèi)容為-1的一個(gè)字節(jié),并讀出。importjava.io.*;publicclassTest{publicstaticvoidmain(String[]args)throwsException{
DataOutputStream
out=newDataOutputStream(newFileOutputStream("c:/trytry.dat"));
out.writeByte(-1);
out.close();
DataInputStream
in=newDataInputStream(newFileInputStream("c:/trytry.dat"));
inta=in.readByte();
System.out.println(Integer.toHexString(a));
System.out.println(a);
in.skip(-1);//往后一個(gè)位置,以便下面重新讀出
a=in.readUnsignedByte();
System.out.println(Integer.toHexString(a));
System.out.println(a);
in.close(); }}49文件讀寫(xiě)操作運(yùn)行結(jié)果ffffffff-1ff255說(shuō)明用ultraEdit打開(kāi)c:/trytry.dat文件,其內(nèi)容為FF如果用readByte讀入,其高24位都將補(bǔ)1,所以結(jié)果還是-1如果用readUnsignedByte讀入,其高24位都將補(bǔ)0,結(jié)果就變成了255寫(xiě)的字節(jié)是連續(xù)的,中間沒(méi)有分隔符,所以應(yīng)該記住寫(xiě)的數(shù)據(jù)類(lèi)型、個(gè)數(shù)等情況,以便將來(lái)利用50文件讀寫(xiě)操作讀二進(jìn)制文件讀取例6-7創(chuàng)建的數(shù)據(jù)文件中的3個(gè)int型數(shù)字,顯示相加結(jié)果importjava.io.*;classEx6_10{ publicstaticvoidmain(String[]args){ StringfileName="c:\\data1.dat";
intsum=0;try{
DataInputStream
instr=newDataInputStream(newBufferedInputStream(new
FileInputStream(fileName)));sum+=instr.readInt();sum+=instr.readInt();sum+=instr.readInt();
System.out.println("Thesumis:"+sum);
instr.close();} catch(IOException
iox){
System.out.println("Problemreading"+fileName);} }}}51文件讀寫(xiě)操作該程序顯示結(jié)果是254分析readInt方法可以從輸入流中讀入4個(gè)字節(jié)并將其當(dāng)作int型數(shù)據(jù)由于知道文件中存儲(chǔ)的是3個(gè)int型數(shù)據(jù),所以使用了3個(gè)讀入語(yǔ)句如果不知道數(shù)據(jù)的個(gè)數(shù)該怎么辦呢?因?yàn)镈ataInputStream的讀入操作如遇到文件結(jié)尾就會(huì)拋出EOFException異常,所以我們可以將讀操作放入try塊中52文件讀寫(xiě)操作將讀操作放入try塊中,使遇到文件結(jié)尾就會(huì)拋出EOFException異常,進(jìn)入到相應(yīng)的catch塊中try{while(true)sum+=instr.readInt();}catch(EOFException
eof){
System.out.println("Thesumis:"+sum);
instr.close();}53文件讀寫(xiě)操作如果沒(méi)有讀到結(jié)尾,在讀取過(guò)程中發(fā)生的異常屬于IOException,這樣就需要我們?cè)偌右粋€(gè)catch塊處理這種異常一個(gè)try塊后面可以跟不止一個(gè)catch塊,用于處理各種可能發(fā)生的異常我們可以在上段代碼后再加上用于捕捉IOException的代碼段如下catch(
IOException
eof){
System.out.println("Problemreadinginput");
instr.close();}54文件讀寫(xiě)操作如果catch塊中的close方法也發(fā)生異常,現(xiàn)在就沒(méi)法捕獲了。解決方法可以有在main方法中拋出異常比較簡(jiǎn)單缺點(diǎn)是沒(méi)有catch塊,因而無(wú)法對(duì)異常進(jìn)行進(jìn)一步處理,例如給出提示信息使用嵌套的try塊55文件讀寫(xiě)操作importjava.io.*;classEx6_11{publicstaticvoidmain(String[]args){ StringfileName="c:/data1.dat";longsum=0; try{
DataInputStream
instr=newDataInputStream(newBufferedInputStream(new
ileInputStream(fileName)));
try{while(true)sum+=instr.readInt();}catch(EOFException
eof){
System.out.println("Thesumis:"+sum);
instr.close();}}catch(IOException
iox){
System.out.println("IOProblemswith"+fileName);}}}}56文件的特性讀和寫(xiě)的權(quán)限文件長(zhǎng)度修改時(shí)間是否是目錄java.io.File類(lèi)設(shè)定文件屬性查詢(xún)文件屬性文件、目錄管理57文件、目錄管理構(gòu)造方法:58文件、目錄管理常用方法:59文件、目錄管理獲取文件路徑importjava.io.*;classAttrDemo1{publicstaticvoidmain(String[]args)throwsIOException{Filetestfile=newFile("."+File.separatorChar+"testfile1");
testfile.createNewFile();
System.out.println("name="+testfile.getName());
System.out.println("path="+testfile.getPath());
System.out.println("absolutepath="+testfile.getAbsolutePath());
System.out.println("canonicalpath="+testfile.getCanonicalPath());}}60文件、目錄管理獲取文件修改時(shí)間importjava.io.*;importjava.util.*;publicclassAttrDemo2{ publicstaticvoidmain(String[]args)throwsIOException{ Filetestfile=newFile("testfile2");
testfile.delete();
testfile.createNewFile();longmodtime=testfile.lastModified();
System.out.println("lastmodificationtime#1="+newDate(modtime));testfile.setLastModified(0);
modtime=testfile.lastModified();
System.out.println("lastmodificationtime#2="+newDate(modtime)); }}61文件、目錄管理獲取和設(shè)定文件長(zhǎng)度importjava.io.*;publicclassAttrDemo3{publicstaticvoidmain(String[]args)throwsIOException{Filetestfile=newFile("testfile3");
testfile.delete();
testfile.createNewFile();
System.out.println("length#1="+testfile.length());
RandomAccessFile
raf=newRandomAccessFile("testfile3","rw");raf.setLength(100);
raf.close();
System.out.println("length#2="+testfile.length());}}62文件、目錄管理設(shè)置讀寫(xiě)權(quán)限importjava.io.*;publicclassAttrDe
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)3U緊湊型節(jié)能燈數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025年中國(guó)1138聯(lián)苯胺黃顏料數(shù)據(jù)監(jiān)測(cè)報(bào)告
- 2025至2030年中國(guó)香柏瘤木皮市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)鑄型尼龍支承環(huán)市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)配電用接續(xù)金具市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)螺旋集塵器市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)耕整機(jī)市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)空心螺栓市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)沼氣配件市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025至2030年中國(guó)樹(shù)脂腰扣市場(chǎng)分析及競(jìng)爭(zhēng)策略研究報(bào)告
- 2025年天津市河北區(qū)普通高中學(xué)業(yè)水平合格性模擬檢測(cè)數(shù)學(xué)試題(含答案)
- 2025-2030中國(guó)物理氣相沉積(PVD)涂層系統(tǒng)行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025河南省豫地科技集團(tuán)社會(huì)招聘169人筆試參考題庫(kù)附帶答案詳解
- 人教版(2024)七年級(jí)下冊(cè)英語(yǔ)期末模擬測(cè)試卷(含答案)
- 兵團(tuán)開(kāi)放大學(xué)2025年春季《公共關(guān)系學(xué)》終結(jié)考試答案
- 電線(xiàn)電纜出入庫(kù)管理制度
- T/CADCC 003-2024汽車(chē)漆面保護(hù)膜施工技術(shù)規(guī)程
- 福建省廈門(mén)市雙十中學(xué)2025屆七年級(jí)生物第二學(xué)期期末聯(lián)考模擬試題含解析
- 【小學(xué)】新蘇教版小學(xué)數(shù)學(xué)四年級(jí)下冊(cè)暑假每日一練(02):計(jì)算題-應(yīng)用題(含答案)
- 2025豬藍(lán)耳病防控及凈化指南(第三版)
- TCUWA20059-2022城鎮(zhèn)供水管網(wǎng)模型構(gòu)建與應(yīng)用技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論