版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章輸入/輸出7.1流和文件7.2基本輸入/輸出類7.3文件的輸入/輸出7.4編程實(shí)例 7.1流和文件
7.1.1流
Java語(yǔ)言中輸入/輸出功能是通過(guò)流類來(lái)實(shí)現(xiàn)的,java.io包提供了一套豐富的流類,可以完成從基本的輸入/輸出到復(fù)雜的隨機(jī)文件訪問(wèn),包括Java中的網(wǎng)絡(luò)操作也是通過(guò)流來(lái)完成的。
流是一個(gè)很形象的概念,當(dāng)程序需要讀取數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)通向數(shù)據(jù)源的流,這個(gè)數(shù)據(jù)源可以是文件、內(nèi)存或是網(wǎng)絡(luò)連接。當(dāng)程序需要寫入數(shù)據(jù)的時(shí)候,就會(huì)開(kāi)啟一個(gè)通向目的地的流。可以想像,數(shù)據(jù)好像在其中流動(dòng),如圖7.1所示。圖7.1流的概念
Java中的流按照處理數(shù)據(jù)的單位可分為兩種:一種是字節(jié)流,另一種是字符流,分別由四個(gè)抽象類InputStream、OutputStream、Reader和Writer來(lái)表示。Java中的其他多種多樣的流類均是由它們派生出來(lái)的。早期的Java版本僅提供InputStream和OutputStream,它們是基于字節(jié)的流,而基于字符流的Reader和Writer是作為補(bǔ)充后來(lái)加入的。
本書主要介紹字節(jié)流的使用。字符流的使用與字節(jié)流十分相似,只是它們的讀/寫單位是Unicode字符,而字節(jié)流的讀/寫單位是字節(jié)。按照對(duì)流中數(shù)據(jù)的處理方式,Java語(yǔ)言中的流可分為文本流和二進(jìn)制流。文本流是一個(gè)字符序列,在文本流中可按需要進(jìn)行某些字符的轉(zhuǎn)換,被讀/寫的字符和外部設(shè)備之間不存在一一對(duì)應(yīng)的關(guān)系,被讀/寫字符的個(gè)數(shù)可能與外部設(shè)備中字符的個(gè)數(shù)不一樣。例如標(biāo)準(zhǔn)輸出流System.out就是文本流,程序中不同類型的數(shù)據(jù)經(jīng)過(guò)轉(zhuǎn)換后輸出到標(biāo)準(zhǔn)輸出設(shè)備。二進(jìn)制流在讀/寫過(guò)程中不進(jìn)行轉(zhuǎn)換,外部設(shè)備中的字節(jié)(或字符)與被讀/寫的字節(jié)(或字符)一一對(duì)應(yīng)。
由于Java輸入/輸出涉及的類非常多,本章首先介紹幾個(gè)基本的抽象類,然后著重討論文件的輸入/輸出操作。本書第8章將討論部分有關(guān)網(wǎng)絡(luò)編程的流類的使用。7.1.2文件
文件也是一個(gè)邏輯概念。計(jì)算機(jī)系統(tǒng)中的文件不僅指通常的磁盤文件,還包括很多外部設(shè)備,如鍵盤、顯示器、打印機(jī)等,都可以看成是文件。
Java語(yǔ)言中對(duì)文件的讀/寫操作都是通過(guò)流來(lái)完成的。通過(guò)對(duì)文件的打開(kāi)操作,可以建立流與特定文件之間的聯(lián)系??梢允褂幂斎肓鲝奈募镒x出字節(jié),并將這些字節(jié)保存到臨時(shí)的字節(jié)數(shù)組里,或者使用輸出流把它們寫到新的文件里。值得注意的是,并不是所有的文件都具有相同的功能,例如,磁盤文件支持隨機(jī)存取,而標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出只能順序存取。
使用關(guān)閉操作,可以解除流與特定文件之間的聯(lián)系。對(duì)于一個(gè)輸出流,關(guān)閉流會(huì)使其相關(guān)的緩沖區(qū)中的所有內(nèi)容寫到外部設(shè)備。在程序終止前,應(yīng)該關(guān)閉所有打開(kāi)的流。 7.2基本輸入/輸出類
7.2.1InputStream類
InputStream是基本的輸入流類,它是一個(gè)抽象類,程序中不可能直接創(chuàng)建InputStream類的對(duì)象,它定義了輸入流類共同的特性。
InputStream類中定義了read方法,用于從輸入流讀取數(shù)據(jù):
●?publicabstractintread()throwsIOException;
●?publicintread(byteb[])throwsIOException;
●?publicintread(byteb[],intoffset,intlength)throwsIOException。
read方法有幾種重載形式,可以讀取一個(gè)字節(jié)或一組字節(jié)。若流中數(shù)據(jù)已讀完,例如遇到磁盤文件尾,則返回-1。第三種形式的參數(shù)offset指將結(jié)果放在數(shù)組b[]中從第offset個(gè)字節(jié)開(kāi)始的空間,length為字節(jié)長(zhǎng)度。
InputStream類中還定義了其他一些基本的方法:
●?publicintavailable()throwsIOException——返回輸入流中可用的字節(jié)數(shù)。此方法對(duì)InputStream的有些派生類無(wú)效,會(huì)返回零字節(jié)的錯(cuò)誤結(jié)果。
●?publicvoidclose()throwsIOException——關(guān)閉輸入流并釋放資源?!?publicbooleanmarkSupported();——返回布爾值,說(shuō)明此流能否做標(biāo)記。
●?publicsynchronizedvoidmark(intreadlimit);——為當(dāng)前流做標(biāo)記。其參數(shù)說(shuō)明在標(biāo)記失效前可以讀多少字節(jié),這個(gè)值通常也就設(shè)定了流的緩沖區(qū)大小。
●?publicsynchronizedvoidreset()throwsIOException——返回到上一次做標(biāo)記處。
●?publiclongskip(longn)throwsIOException——從輸入流跳過(guò)幾個(gè)字節(jié)。返回值為實(shí)際跳過(guò)的字節(jié)數(shù)。輸入流只能從外部設(shè)備順序讀取數(shù)據(jù),為了能重復(fù)讀部分內(nèi)容,提供“標(biāo)記”(mark)這一機(jī)制,用于記錄流中某些特定的位置。要支持mark,要求輸入流有一定大小的緩沖區(qū),用于存放部分?jǐn)?shù)據(jù),即從標(biāo)記點(diǎn)到當(dāng)前位置的數(shù)據(jù)。當(dāng)這一緩沖區(qū)裝滿溢出,無(wú)法追蹤到上一個(gè)標(biāo)記處的數(shù)據(jù)時(shí),標(biāo)記失效。若用reset返回到一個(gè)失效的標(biāo)記處,將會(huì)發(fā)生輸入/輸出異常(IOException)。7.2.2OutputStream類
OutputStream是基本的輸出流類,與InputStream類一樣也是抽象類,它定義了輸出流類的共同特性。
OutputStream類定義了write方法,用于輸出數(shù)據(jù):
●?publicabstractvoidwrite(intb)throwsIOException;
●?publicvoidwrite(byteb[])throwsIOException;
●?publicvoidwrite(byteb[],intoffset,intlength)throwsIOException。這三個(gè)重載形式都是用來(lái)向輸出流寫數(shù)據(jù)的。參數(shù)b為要輸出的數(shù)據(jù),第三種形式中offset、length參數(shù)的作用與輸入流類的read方法類似。
其他方法主要有:
●?publicvoidflush();——清除緩沖區(qū),將緩沖區(qū)內(nèi)尚未寫出的數(shù)據(jù)全部輸出。若要繼承OutputStream類,這個(gè)方法必須重寫,因?yàn)镺utputStream中的方法未做任何實(shí)質(zhì)性工作;
●?publicvoidclose();——關(guān)閉輸出流,釋放資源。7.2.3PrintStream類
為了在標(biāo)準(zhǔn)輸出流上提供更靈活方便的輸出,Java語(yǔ)言定義了輸出類PrintStream,標(biāo)準(zhǔn)輸出流對(duì)象System.out就是PrintStream類的實(shí)例。
PrintStream類可以使用OutputStream類中定義的方法:
●?publicvoidwrite(intb);
●?publicvoidwrite(byteb[],intoffset,intlength);
●?publicvoidflush();
●?publicvoidclose()。更重要的是,PrintStream類提供了print和println方法,用于輸出各種類型的數(shù)據(jù)(如int、double類型),并將各種不同類型的數(shù)據(jù)轉(zhuǎn)換為字符串輸出。
print方法的主要形式有:
●?publicvoidprint(Objectobj);
●?publicvoidprint(Strings);
●?publicvoidprint(chars[]);
●?publicvoidprint(charc);
●?publicvoidprint(inti);
●?publicvoidprint(longl);
●?publicvoidprint(floatf);●?publicvoidprint(doubled);
●?publicvoidprint(booleanb)。
println方法與print方法形式相同,在輸出時(shí)除輸出數(shù)據(jù)外還輸出一個(gè)換行符。println還有一個(gè)不帶參數(shù)的形式:
publicvoidprintln()
該方法用于輸出一個(gè)換行符。7.2.4其他常用流類
1.DataInputStream類與DataOutputStream類
InputStream類、OutputStream類定義了流類的基本特性,但是它提供的讀/寫數(shù)據(jù)的方法比較簡(jiǎn)單,只提供了一次讀/寫若干字節(jié)的功能,在實(shí)際使用時(shí)很不方便。
為了解決這個(gè)問(wèn)題,Java輸入/輸出包中提供了數(shù)據(jù)輸入流類(DataInputStream)與數(shù)據(jù)輸出流類(DataOutput
Stream),對(duì)InputStream和OutputStream類進(jìn)行包裝,以InputStream和OutputStream類一次讀/寫若干字節(jié)的功能為基礎(chǔ)提供了讀/寫各種類型數(shù)據(jù)的功能。數(shù)據(jù)輸入流類DataInputStream類構(gòu)造方法的形式為
publicDataInputStream(InputStream
in)
其中,參數(shù)in為本來(lái)的輸入流對(duì)象。例如,下面的語(yǔ)句創(chuàng)建一個(gè)數(shù)據(jù)輸入流類對(duì)象從標(biāo)準(zhǔn)輸入流讀取數(shù)據(jù):
DataInputStreamkeyInput=newDataInputStream
(System.in);
DataInputStream類提供了讀取各種類型數(shù)據(jù)的方法,例如:
●?publicfinalintread(byte[]
b)throwsIOException;
●?publicfinalintread(byte[]
b,int
off,int
len)throwsIOException;●?publicfinalbooleanreadBoolean()throwsIOException;
●?publicfinalbytereadByte()throwsIOException;
●?publicfinalintreadUnsignedByte()throwsIOException;
●?publicfinalshortreadShort()throwsIOException;
●?publicfinalintreadUnsignedShort()throwsIOException;
●?publicfinalcharreadChar()throwsIOException;
●?publicfinalintreadInt()throwsIOException;
●?publicfinallongreadLong()throwsIOException;
●?publicfinalfloatreadFloat()throwsIOException;
●?publicfinaldoublereadDouble()throwsIOException。
DataInputStream類是FilterInputStream類的子類,從FilterInputStream類中繼承了skip、available、close、mark、read等方法,功能與InputStream類中同名方法類似,這里不再詳細(xì)介紹。
DataOutputStream類用于數(shù)據(jù)的輸出,其構(gòu)造方法形式為
publicDataOutputStream(OutputStream
out)
其中,參數(shù)out為本來(lái)的輸出流對(duì)象。
DataOutputStream類定義了很多方法,用于輸出各種類型的數(shù)據(jù),例如:
●?publicfinalvoidwriteBoolean(boolean
v)throwsIOException;
●?publicfinalvoidwriteByte(int
v)throwsIOException;
●?publicfinalvoidwriteShort(int
v)throwsIOException;
●?publicfinalvoidwriteChar(int
v)throwsIOException;
●?publicfinalvoidwriteInt(int
v)throwsIOException;
●?publicfinalvoidwriteLong(long
v)throwsIOException;
●?publicfinalvoidwriteFloat(float
v)throwsIOException;
●?publicfinalvoidwriteDouble(double
v)throwsIOException;
●?publicfinalvoidwriteBytes(String
s)throwsIOException;●?publicfinalvoidwriteChars(String
s)throwsIOException。
DtaOutputStream類是FilterOutputStream類的子類,從該類繼承了close和write方法,write方法的功能及形式同OutputStream類的同名方法,close方法用于關(guān)閉輸出流。
2.InputStreamReader類與OutputStreamWriter類
InputStream類與OutputStream類是字節(jié)流,而Java語(yǔ)言本身采用的是Unicode字符集,使用InputStream類與OutputStream類讀/寫雙字節(jié)的中文信息有時(shí)會(huì)出現(xiàn)問(wèn)題,不能正確處理。
Java語(yǔ)言輸入/輸出包從JDK1.1版開(kāi)始提供了Reader類、Writer類讀/寫字符流,但是JDK1.1版以前的輸入/輸出功能都是通過(guò)字節(jié)流來(lái)實(shí)現(xiàn)的。為了能夠處理這部分類型的流對(duì)象,JDK1.1版提供了InputStreamReader類與OutputStream
Writer類,它們分別是Reader、Writer類的子類,提供從字節(jié)流到字符流的轉(zhuǎn)換。
InputStreamReader類的構(gòu)造方法有四種形式:
●?publicInputStreamReader(InputStream
in);
●publicInputStreamReader(InputStream
in,String
charsetName)throwsUnsupportedEncodingException;●?publicInputStreamReader(InputStream
in,Charset
cs);
●?publicInputStreamReader(InputStream
in,CharsetDecoder
dec)。
參數(shù)in為原來(lái)的字節(jié)流對(duì)象,charsetName、cs及dec均用于指定字符編碼集。
InputStreamReader類提供了以下與InputStream類相似的方法,用于讀取數(shù)據(jù),不過(guò)它是以字符為單位的:
●?publicintread()throwsIOException;
●?publicintread(char[]
cbuf,int
offset,int
length)throwsIOException。
InputStreamReader類的其他常用的方法還有:
●?publicbooleanready()throwsIOException——判斷輸入流是否已準(zhǔn)備好,即是否可以讀取數(shù)據(jù);
●?publicvoidclose()throwsIOException——關(guān)閉輸入流。
OutputStreamWrite類的構(gòu)造方法有四種形式:
●?publicOutputStreamWriter(OutputStream
out);
●?publicOutputStreamWriter(OutputStream
out,Charset
cs);
●?publicOutputStreamWriter(OutputStream
out,CharsetEncoder
enc);●publicOutputStreamWriter(OutputStream
out,String
charsetName)throwsUnsupportedEncodingException。
參數(shù)out為原來(lái)的字節(jié)輸出流,cs、enc、charsetName用于指定字符編碼集。
對(duì)于中文信息的輸入/輸出,可采用相應(yīng)的漢字編碼集,例如:
InputStreamReaderin=newInputStreamReader(System.in,“GB2312”);
OutputStreamWriterout=newOutputStreamWriter
(System.out,“GB2312”);
OutputStreamWriter類常用的方法主要有下面幾個(gè):●?publicvoidwrite(int
c)throwsIOException;
●?publicvoidwrite(char[]
cbuf,int
off,int
len)throwsIOException;
●?publicvoidwrite(String
str,int
off,int
len)throwsIOException。
以上三種方法用于向輸出流輸出數(shù)據(jù),功能與OutputStream類的同名方法類似,不過(guò)是以字符為單位的。
●?publiclongskip(long
n)throwsIOException——從輸入流跳過(guò)幾個(gè)字符。返回值為實(shí)際跳過(guò)的字符數(shù);
●?publicvoidflush()throwsIOException——刷新輸出流;
●?publicvoidclose()throwsIOException——關(guān)閉輸出流。
3.BufferedReader類與BufferedWriter類
BufferedReader類與BufferedWriter類分別是Reader類和Writer類的子類,為Reader類對(duì)象和Writer類對(duì)象提供輸入和輸出緩沖區(qū)以提高輸入/輸出的效率。
BufferedReader類的構(gòu)造方法形式為:
●?publicBufferedReader(Reader
in);
●?publicBufferedReader(Reader
in,int
sz)。
參數(shù)in為字符輸入流對(duì)象,參數(shù)sz用于指定緩沖區(qū)大小。
除了從Reader類繼承的方法外,BufferedReader類還提供了讀取一行字符的方法:
publicStringreadLine()throwsIOException
BufferedWriter類的構(gòu)造形式為:
●?publicBufferedWriter(Writer
out);
●?publicBufferedWriter(Writer
out,int
sz)。
參數(shù)out為字符輸出流對(duì)象,sz指定緩沖區(qū)的大小。
除了從Writer類繼承的方法外,BufferedWriter類還提供了在輸出流中插入換行符的方法:
publicvoidnewLine()throwsIOException
在第8章的例子中讀者將可以看到這里介紹的幾個(gè)流類的例子。
7.3文件的輸入/輸出
7.3.1FileInputStream類
磁盤文件的輸入/輸出操作是Java語(yǔ)言中流類最基本的應(yīng)用,磁盤文件的輸入操作由FileInputStream類實(shí)現(xiàn)。
FileInputStream是文件輸入流類,最常用的構(gòu)造方法只需提供文件名即可,形式如下:
publicFileInputStream(StringfileName)throwsFileNot
FoundException
FileInputStream類是InputStream類的派生類,它覆蓋了InputStream類中的read、skip、available、close等方法。程序7.1演示了磁盤文件的讀取方法,運(yùn)行該程序?qū)@示FileInput.java文件的內(nèi)容。【程序7.1】顯示文本文件。
importjava.io.*;
publicclassFileInput
{
publicstaticvoidmain(String[]args)
{
bytebuffer[]=newbyte[2048];
try{
FileInputStreamfileIn=newFileInputStream("FileInput.java"); //創(chuàng)建FileInputStream類對(duì)象,打開(kāi)文件
intbytes=fileIn.read(buffer,0,2048); //文件內(nèi)容讀入到buffer
Stringstr=newString(buffer,0,bytes); //利用buffer內(nèi)容創(chuàng)建字符串
System.out.print(str); //輸出字符串內(nèi)容
}
catch(Exceptione){ System.out.println(e.toString());
}
}
}
7.3.2FileOutputStream類
FileOutputStream類提供了寫文件的功能,它從Output
Stream派生而來(lái)。
FileOutputStream類最常用的構(gòu)造方法與FileInputStream類似,只需提供文件名作參數(shù),形式如下:
publicFileOutputStream(StringfileName)throwsFileNot
FoundException
FileOutputStream類覆蓋了OutputStream類中的write、close、flush等方法。程序7.2演示了創(chuàng)建磁盤文件的方法,完成了磁盤文件的復(fù)制。
【程序7.2】復(fù)制文件。
importjava.io.*;
publicclassFileCopy
{
publicstaticvoidmain(String[]args)
{
if(args.length!=2){
System.out.println("命令行參數(shù)不正確"); }
try{
FileInputStreaminFile=newFileInputStream(args[0]); //打開(kāi)源文件
FileOutputStreamoutFile=newFileOutputStream(args[1]);//打開(kāi)目標(biāo)文件
while(inFile.available()>0){
intc=inFile.read(); //從源文件讀一字節(jié)
outFile.write(c); //寫入到目標(biāo)文件
} inFile.close(); //關(guān)閉源文件
outFile.close(); //關(guān)閉目標(biāo)文件
System.out.println("文件復(fù)制成功");
}
catch(Exceptione){
System.out.println("文件復(fù)制失敗");
}
}
}程序7.2從命令行獲得源文件和目標(biāo)文件名(保存在main方法的args參數(shù)中)。首先判斷參數(shù)的個(gè)數(shù),如果參數(shù)個(gè)數(shù)不為2,則顯示出錯(cuò)信息后退出;如果參數(shù)個(gè)數(shù)正確,則
打開(kāi)第一個(gè)參數(shù)(args[0])指定的文件,將其內(nèi)容復(fù)制到第二個(gè)參數(shù)指定的文件。如果第二個(gè)參數(shù)指定的文件不存在,則創(chuàng)建一個(gè)新文件;如果該文件存在,則原來(lái)的內(nèi)容被覆蓋。
如果使用JDK調(diào)試程序7.2,運(yùn)行該程序時(shí)可在命令行輸入:
javaFileCopyFileCopy.javaFileCopy.bak其中,斜體字部分為傳遞給程序的命令行參數(shù),上面的命令行表示將FileCopy.java復(fù)制到FileCopy.bak。
如果在JBuilder集成環(huán)境下調(diào)試該程序,可在設(shè)置運(yùn)行配置的對(duì)話框中輸入命令行參數(shù),如圖7.2所示。圖7.2在JBuilder集成環(huán)境下設(shè)置調(diào)試命令行7.3.3RandomAccessFile類
FileInputStream與FileOutputStream類對(duì)磁盤文件的操作僅限于順序讀或順序?qū)?,但很多時(shí)候希望訪問(wèn)文件中的某一塊數(shù)據(jù),或者按照某種邏輯順序而不是數(shù)據(jù)在文件中存儲(chǔ)的物理順序訪問(wèn)文件,java.io包提供了RandomAccessFile類來(lái)實(shí)現(xiàn)磁盤文件的隨機(jī)訪問(wèn)。
RandomAccessFile類不是InputStream或者OutputStream類的子類,但它定義了與InputStream和OutputStream類相似的read、write等方法,使用方法與FileInputStream、File
OutputStream類似。
RandomAccessFile類構(gòu)造方法常用形式如下:
publicRandomAccessFile(StringFilename,Stringmode)throwsIOException
mode參數(shù)為文件讀/寫方式,用“r”表示只讀,“rw”表示可讀/寫,與C語(yǔ)言文件打開(kāi)的參數(shù)的含義類似。
與FileInputStream、FileOutputStream相比,Random
AccessFile的使用更靈活、更方便,定義了很多方法用于讀/寫各種類型的數(shù)據(jù),例如:
●?publicfinalbooleanreadBoolean()throwsIOException;
●?publicfinalbytereadByte()throwsIOException;●?publicfinalcharreadChar()throwsIOException;
●?publicfinalshortreadShort()throwsIOException;
●?publicfinalintreadInt()throwsIOException;
●?publicfinaldoublereadDouble()throwsIOException;
●?publicfinalfloatreadFloat()throwsIOException;
●?publicfinalvoidwriteBoolean(booleanv)throwsIOException;
●?publicfinalvoidwriteByte(bytev)throwsIOException;
●?publicfinalvoidwriteChar(charv)throwsIOException;
●?publicfinalvoidwriteShort(shortv)throwsIOException;
●?publicfinalvoidwriteInt(intv)throwsIOException;●?publicfinalvoidwriteDouble(doublev)throwsIOException;
●?publicfinalvoidwriteFloat(floatv)throwsIOException。
其他主要方法成員還有:
●?publicvoidseek(longpos);——將文件當(dāng)前讀/寫位置移動(dòng)到一個(gè)絕對(duì)地址,該地址是相對(duì)于文件頭的偏移量。地址0表示文件的開(kāi)頭。
●?longgetFilePointer();——返回文件當(dāng)前讀/寫位置。
●?longlength();——返回文件的長(zhǎng)度。
●?publicfinalStringreadLine();——從文件讀取一行文本。程序7.3是一個(gè)使用RandomAccessFile類的簡(jiǎn)單例子,該程序以讀/寫方式打開(kāi)一個(gè)已存在的文件,在文件的尾部添加一個(gè)字符串。
【程序7.3】RandomAccessFile類的使用。
importjava.io.IOException;
importjava.io.RandomAccessFile;
publicclassFileTest{
publicstaticvoidmain(Stringargs[])
{
RandomAccessFilemyRAFile;
Strings="InformationtoAppend\nHello!\n";
try{
myRAFile=newRandomAccessFile(“file1.txt”,“rw”); //打開(kāi)文件
myRAFile.seek(myRAFile.length()); //移動(dòng)到文件尾
myRAFile.writeBytes(s); //添加數(shù)據(jù)
myRAFile.close();
}catch(IOExceptione){
System.out.print(e.getMessage());
}
}
}7.3.4File類
File類并不是流類,但在處理磁盤文件時(shí)經(jīng)常會(huì)用到,它可以完成文件的刪除、創(chuàng)建等操作。
File類有兩個(gè)經(jīng)常會(huì)用到的與平臺(tái)相關(guān)的屬性。一個(gè)是seperatorChar,它是系統(tǒng)的名字分隔符,在UNIX平臺(tái)上為“/”,在Windows平臺(tái)上為“\”。另一個(gè)是路徑分隔字符,在UNIX平臺(tái)上為“:”,而在Windows平臺(tái)上為“;”,如在Windows95中使用path命令設(shè)置路徑時(shí),多個(gè)文件夾名之間采用“;”分隔。
File類的構(gòu)造方法有三種形式,分別根據(jù)文件名、文件路徑與文件名、文件對(duì)象(目錄)與文件名創(chuàng)建對(duì)象:
●?publicFile(Stringpath);
●?publicFile(Stringpath,Stringname);
●?publicFile(Filedir,Stringname)。
習(xí)慣使用Windows平臺(tái)的讀者應(yīng)注意,F(xiàn)ile類所指的文件包含文件和文件夾(子目錄),可以使用File類的方法創(chuàng)建、刪除和更名子目錄。
File類常用的方法成員還有:
●?publicbooleancanWrite();——測(cè)試文件和目錄是否可寫;
●?publicbooleancanRead();——測(cè)試文件和目錄是否可讀;
●?publicbooleanexists();——測(cè)試文件和目錄是否存在;
●?publicbooleandelete();——?jiǎng)h除文件或目錄,若刪除目錄,要求該目錄必須為空;
●?publicbooleancreateNewFile();——當(dāng)且僅當(dāng)該文件不存在時(shí),創(chuàng)建一個(gè)空文件;●?publicbooleanisDirectory();——判斷File對(duì)象是否為目錄;
●?publicbooleanisFile();——判斷File對(duì)象是否為文件;
●?publicbooleanisHidden();——測(cè)試文件或目錄是否隱含;
●?publiclonglastModified();——獲取文件或目錄的最后修改時(shí)間;
●?publicbooleansetLastModified(longtime);——設(shè)置文件或目錄的最后修改時(shí)間;●?publicString[]list();——得到當(dāng)前目錄下的所有文件名和目錄名,若該File對(duì)象不是表示目錄,則返回null;
●?publicbooleanmkdir();——?jiǎng)?chuàng)建一個(gè)目錄;
●?publicbooleanmkdirs();——?jiǎng)?chuàng)建一個(gè)目錄樹(shù),包括原來(lái)不存在的父目錄;
●?publicbooleanrenameTo(Filedest);——重命名文件或目錄,成功返回true;
●?publicbooleansetReadOnly();——將文件或目錄設(shè)置為只讀。
程序7.4使用File類列出當(dāng)前目錄下的所有文件和子目錄名。【程序7.4】當(dāng)前目錄文件列表。
importjava.io.File;
publicclassDirList{
publicstaticvoidmain(String[]args){
Filepath=newFile(".");
String[]list=path.list();
for(inti=0;i<list.length;i++)
System.out.println(list[i]);
}
}【程序7.5】File類的文件管理功能演示。
importjava.io.*;
publicclassdemofile
{
privatefinalstaticStringusage=
"Usage:demofilepath1...\n"+
"Createeachpath\n"+
"Usage:demofile-dpath1...\n"+
"Deleteseachpath\n"+
"Usage:demofile-rpath1path2\n"+
"renamesfrompath1topath2\n"; privatestaticvoidusage()
{
System.err.println(usage);
System.exit(1);
}
privatestaticvoidfileData(Filef)
{
try{
System.out.println("Absolutepath:"+f.getAbsolutePath()+ “\r\nCanread:”+f.canRead()+
“\r\nCanwrite:”+f.canWrite()+
“\r\ngetName:”+f.getName()+
“\r\ngetParent:”+f.getParent()+
"\r\ngetPath:"+f.getPath()+
"\r\ngetCanonicalPath:"+f.getCanonicalPath()+
"\r\ntostring:"+f.toString()); if(f.isFile())
System.out.println("itisafile");
elseif(f.isDirectory())
System.out.println("itisadirectory");
}catch(Exceptione){
Stringerr=e.toString();
System.out.println(err);
}
}
publicstaticvoidmain(String[]args) {
if(args.length<1)
usage();
if(args[0].equals("-r")){
if(args.length!=3)usage();
Fileold=newFile(args[1]);
Filername=newFile(args[2]);
old.renameTo(rname);
fileData(old);
fileData(rname);
return; }
intcount=0;
booleandel=false;
if(args[0].equals("-d")){
count++;
del=true;
}
for(;count<args.length;count++){
Filef=newFile(args[count]);
if(f.exists()){
System.out.println(f+"Exists"); if(del){
System.out.println("deleting..."+f);
f.delete();
}
}
else{
if(!del){
f.mkdirs();
System.out.println("created"+f); }
}
fileData(f);
}
}
}
程序7.5使用File類實(shí)現(xiàn)了目錄的創(chuàng)建、刪除和重命名,該程序從命令行獲取參數(shù),然后執(zhí)行相應(yīng)的操作。例如,輸入命令:
javademofilenewdir1newdir2斜體部分為傳遞給命令行的參數(shù),即在當(dāng)前目錄下創(chuàng)建newdir1和newdir2子目錄。
輸入命令:
javademofile–dnewdir1
將刪除newdir1子目錄。
輸入命令:
javademofile–rnewdir2newdir3
將子目錄newdir2命名為newdir3。
7.4編程實(shí)例
最后再來(lái)看一個(gè)例子,該程序?qū)⑽募ext.src的內(nèi)容連接到text.des文件原有內(nèi)容的后面,然后顯示文件text.des的有關(guān)信息,最后顯示文件的內(nèi)容。
【程序7.6】文件的連接。
importjava.io.*;
publicclassfileUnion{
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 快遞信息處理員崗前安全知識(shí)宣貫考核試卷含答案
- 鋼筋骨架工安全文明水平考核試卷含答案
- 牙骨雕刻工安全強(qiáng)化模擬考核試卷含答案
- 激光設(shè)備安裝調(diào)試員安全知識(shí)宣貫競(jìng)賽考核試卷含答案
- 作物制種工崗前跨領(lǐng)域知識(shí)考核試卷含答案
- 船舶理貨員崗前技能安全考核試卷含答案
- 電焊條壓涂工安全技能競(jìng)賽考核試卷含答案
- 地毯整修工崗前流程優(yōu)化考核試卷含答案
- 2024年鹽城市特崗教師招聘真題題庫(kù)附答案
- 2025山西省公務(wù)員考試《行測(cè)》題庫(kù)及答案1套
- 中遠(yuǎn)海運(yùn)集團(tuán)筆試題目2026
- 2026年中國(guó)熱帶農(nóng)業(yè)科學(xué)院橡膠研究所高層次人才引進(jìn)備考題庫(kù)含答案詳解
- 2025-2026學(xué)年四年級(jí)英語(yǔ)上冊(cè)期末試題卷(含聽(tīng)力音頻)
- 浙江省2026年1月普通高等學(xué)校招生全國(guó)統(tǒng)一考試英語(yǔ)試題(含答案含聽(tīng)力原文含音頻)
- 動(dòng)靜脈內(nèi)瘺球囊擴(kuò)張術(shù)
- JTG-D40-2002公路水泥混凝土路面設(shè)計(jì)規(guī)范-PDF解密
- 水廠及管網(wǎng)改擴(kuò)建工程施工節(jié)能降耗主要措施
- 2023-2024學(xué)年貴州省遵義市小學(xué)語(yǔ)文六年級(jí)期末評(píng)估測(cè)試題詳細(xì)參考答案解析
- 銷售心理學(xué)全集(2022年-2023年)
- 變態(tài)反應(yīng)課件
- 電力拖動(dòng)控制線路與技能訓(xùn)練-教案
評(píng)論
0/150
提交評(píng)論