




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第11章Java數(shù)據(jù)流
[內(nèi)容提要]
大部分程序都需要數(shù)據(jù)的輸入和輸出,
從鍵盤讀取數(shù)據(jù),
向文件寫入數(shù)據(jù)或從文件獲取數(shù)據(jù),
將數(shù)據(jù)通過(guò)打印機(jī)打印出來(lái),
通過(guò)網(wǎng)絡(luò)進(jìn)行信息交換
本章介紹Java標(biāo)準(zhǔn)程序庫(kù)中各種處理I/O操作的類
的用途及使用方法。
第1節(jié)輸入/輸出概念
一、流的概述
Java使用流(stream)來(lái)執(zhí)行輸入輸出(I/O)
的功能)流是一種數(shù)據(jù)的源頭和目的之
間的通信途徑。
用于讀入數(shù)據(jù)稱為輸入流(inputstream),
用于寫出數(shù)據(jù)稱為輸出流(outputstream)o
當(dāng)像用流時(shí)需要使用java.io包,因此在涉及數(shù)
據(jù)流操作的程序中都要先導(dǎo)入java.io包:
importjava.io.*;
二、I/O類層次結(jié)構(gòu)
Java提供超過(guò)60個(gè)不同的流類型,這些流
類包含在上面提到的java.io包中,
四個(gè)基本的抽象類:
Inputstream、Outputstream、Reader和
Writero
你不能創(chuàng)建這四個(gè)類型的對(duì)象,但是其他
的方法的返回值可以是他們
InputStrearn
File
Outputstream
RandomAccessFile
Reader
StreaniTokemzer
Writer
圖11-1定義在java,io包中的流結(jié)構(gòu)
三、標(biāo)準(zhǔn)輸入輸出
在System類中有三個(gè)靜態(tài)域System,in、
System,out和System,err。
可以在標(biāo)準(zhǔn)位置使用這三個(gè)系統(tǒng)流進(jìn)行I/O操作O
publicstaticInputstreamin
讀取字符數(shù)據(jù)的標(biāo)準(zhǔn)輸入流。
publicstaticPrintstreamout
顯示或打印輸出信息的標(biāo)準(zhǔn)輸出流
publicstaticPrintstreamerr
輸出錯(cuò)誤信息的標(biāo)準(zhǔn)錯(cuò)誤流。
importjava.io.“一八,入,入]、、,一
publicclasslODemo{例11-1:標(biāo)準(zhǔn)輸入輸出舉例
publicstaticvoidmain(Stringargs[])throwsIOException{
intb;
intcount=0;
//循環(huán)利用Sys比m.in錢收.輸入存入b,在用Systern.out.輸出b
〃如果遇到文件結(jié)束則終止循環(huán)
while((b=System.in.read())!=-1){
count4-F;
System.out.print((char)b);
}
Sysrem.out.println();
System,out.printin(rrprogramendrr);
!)
程序運(yùn)行如下:
輸入:a,b,c,d輸出:a,b,c,d
輸入:AZ(注:輸入復(fù)合鍵CTRL-Z)輸出:programend
第2節(jié)文件的順序訪問(wèn)
一、字節(jié)流
字節(jié)流是用來(lái)讀寫8位的數(shù)據(jù),由于不會(huì)對(duì)數(shù)據(jù)
作任何轉(zhuǎn)換,因此可以用來(lái)處理二進(jìn)制的數(shù)據(jù)。
(一)、Outputstream
(二)、Inputstream
(三)、FilelnputStream和FileOutputStream
(四)、ByteArraylnputStream^ByteArrayOutputStream
(五)、BufferedlnputStream^BufferedOutputStream
Inputstream輸入流輸出流的類繼承關(guān)系
FilelnputStream
Outputstream
StringBufiferlnputStream
ByteArraylnputStreamFileOutputStream
SequencelnputStreamByteArrayOutputStream
PipedlnputStreamPipedOutputStream
FilterlnputStreamFilterOutputStream
BufferedlnputStreamBuflferedOutputStream
LineNumberlnputStreamPrintstream
DatalnputStreamDataOutputStream
PushbacklnputStream
(—0、Outputstream
Outputstream為所有的字節(jié)流輸出流的父類,因
尼所有源自于它的類也會(huì)繼承下列的方法:
voidwrite(intb):寫入一個(gè)字節(jié)的數(shù)據(jù)。
voidwrite(byte[]buttfer):講數(shù)組buffer的數(shù)據(jù)寫
入流。
voidwrite(byte[]9intoffsetintlen):從buffer[offset]
開始,寫入len個(gè)字節(jié)的數(shù)據(jù)。
voidflush():強(qiáng)制將buffer內(nèi)的數(shù)據(jù)寫入流。
voidclose():關(guān)閉流。
(二)、Inputstream
InputStream為所有的字節(jié)輸入流的父類,因此
所宥癰于它的類也會(huì)繼承下列的方法:
intread。:讀入一個(gè)字節(jié)的數(shù)據(jù),如果已達(dá)到文
件的末端,返回值為-L
intread(byte[]buffer):讀出buffer大小的數(shù)據(jù),
返回值為實(shí)際所讀由的字節(jié)。
intread(byte[]bufferJntoffsetjntlen):臀讀出的
數(shù)據(jù)從buffer[offset]開始,寫入len個(gè)字節(jié)至
bufferf,返回值為實(shí)際所讀出的字節(jié)數(shù)目。
intavailable():返回流內(nèi)可供讀取的字節(jié)數(shù)目。
longskip(longn):跳過(guò)n個(gè)字節(jié)的數(shù)據(jù),返回值
為實(shí)像所述過(guò)的數(shù)據(jù)數(shù)。
voidclose():關(guān)閉流。
(三)、FilelnputStream^FileOutputStream
FilelnputStream用來(lái)讀取一個(gè)文件,FileOutPutStream用
來(lái)修數(shù)據(jù)寫入文件。
常用的構(gòu)造函數(shù)如下:
FileInputStream(Stringname):打開文件name用來(lái)讀取
數(shù)據(jù)。
FileInputStream(Filefile):打開文件行l(wèi)e用來(lái)讀取數(shù)據(jù)。
FileOutputStream(Stringname):打開文件name用來(lái)寫入
數(shù)據(jù)。
FileOutputStream(Filefile):打開文件行l(wèi)e用來(lái)寫入數(shù)據(jù)。
FileOutputStream(Stringname,Booleanappend):孑丁開文
件name用來(lái)寫入數(shù)據(jù),若append為true,貝I寫入的數(shù)據(jù)
會(huì)加到原有文件后面,否則,覆蓋原有的文件。
將FileExam.java復(fù)制為FileExam.java.bako
1)程序首先打開FileExam.java文件,
2)使用read。將其內(nèi)容逐字節(jié)讀取出來(lái)(如果
返回值為則表明已到達(dá)文件尾端),
3)再使用write。將讀出的字節(jié)逐一寫入另一個(gè)
文件FileExam.java.bak中。
4)若文件無(wú)法打開(例如FileExam.java不存在)
或無(wú)法生成(FileExam.java.bak),會(huì)拋出
FileNotFoundException異常,若讀寫出錯(cuò),
則會(huì)拋出lOException異常。
5)最后,我們?cè)趂inally中關(guān)閉文件。
importjava..io.*;
publicclassFllelO(例例
pijJblicstaticvoidm.a.in(StringargsC]){?2
FilelnpiAtLSt-reaiiLinFile=null;
FileOu.tputLStreanaou.tFile=null;FilelO.java
try£//打開"FilaExaia.3ava"由次讀取數(shù)據(jù)
inFile=neuFilelnpucStreaia(,TFileExaixi.iaT?a,r);
//4T5FFrrFileExam.java.bakrr用本與_A數(shù)據(jù).
ou.t.F±le=newFileOxitpucStizeaiii(,rFi±i=!E:":;iiu.java.ba.kr,);
inndate;
while((date=inFile.read())?=一[){//從原文件1立取字干
//■次向目標(biāo)文件耳人一個(gè)字干
o\itFile.write(date);
1)
cat.cli(FlieNotFoiAiiclExcepcione)(//處理立件不存在詰;況
System.out;,printIn(e.gemessage());
}
cacch(IOExceptione){//處理工。號(hào)常
Syscem.out.println(e.getMessage());
)
fInal1丫{//亳后的清理工作
//關(guān)閉、源文件
if(inFile?=nnll)<
3丫{inFile.close();}
catcH(IOExceptione){}
)
if(ont.File!=nu[[){//關(guān)閉目*示文件
trY(o\j.tFile.closeQ;}
catLCti(IOExcep11one)()
>}))
(J)、ByteArraylnputStream^
ByteArrayOutputStream
1)使用這兩個(gè)流類可以將數(shù)據(jù)轉(zhuǎn)換到一個(gè)數(shù)據(jù)類型為字
節(jié)類型的數(shù)組(bytearray)中,
2)ByteArraylnputStream^ByteArrayOutputStream^f-
沒(méi)有牽涉到真正的文件,他們使用內(nèi)存(一個(gè)流緩沖
區(qū))作為I/O流的源頭及目的。
3)ByteArrayInputstream用來(lái)從一個(gè)流緩沖區(qū)(字節(jié)數(shù)
組)中讀入數(shù)據(jù),
4)ByteArrayOutputStream用來(lái)將數(shù)據(jù)轉(zhuǎn)換至一個(gè)流緩
沖區(qū)中
5)由于流對(duì)象的內(nèi)容存放在內(nèi)存中,所以可提供較快的
操作。
常用的構(gòu)造函數(shù)如下:
ByteArrayInputStream(byte[]buffer):生成一個(gè)手節(jié)數(shù)組的
輸入流,并指定一個(gè)字節(jié)數(shù)組buffer為此輸入流的流緩沖區(qū)。
ByteArrayOutputStream():生成一個(gè)字節(jié)數(shù)組的輸出流,其
緩沖區(qū)的默認(rèn)初始大小為32字節(jié),若有需要,緩沖區(qū)的大小
會(huì)隨之增加。
ByteArrayOutputStream(intsize):同上,但分配size字節(jié)的初
始大小給此緩沖區(qū)。
ByteArrayOutputStream的一些常用方法:
intsize():返回此流緩沖區(qū)的大小。
byte[]toByteArray():生成一個(gè)新的字節(jié)數(shù)組,并將流的內(nèi)
容復(fù)制到此字節(jié)數(shù)組。
StringtoString():I導(dǎo)流的內(nèi)容轉(zhuǎn)換為String對(duì)象。
下面程序讀入文件data.in,將其內(nèi)容寫入內(nèi)存中(一個(gè)字節(jié)數(shù)
組),接著轉(zhuǎn)換為String對(duì)象,并將1該String對(duì)象內(nèi)的令牌
解析出來(lái)。
importjava.io.*;
importjava.util.*;
publicclassByteI0(例11?3BytelO.java
publicstaticvoidmain(String[]args){
FileinFile=newFile("data,in");//田明源文件
FileinputscrearninData=newFilelnputStreamfinFile);
ByteArrayOutputStreamdataArray=newByteArrayOutputStreaii();
intdata;
while((data=inData.read())!=-1){
dataArray.vrite(data);
)
inData.close();
StringdataStr=dalaArray.coString。;〃將字節(jié)數(shù).組轉(zhuǎn)換成字符串
〃解析String對(duì)象內(nèi)的令牌
StringTokenizertokens=newStrmgTokeiuzer(dataStr);
while(tokens.hasMoreTokens()){
Systeia.out.printin(tokens,nextToken());
}}
catch(IOExcep11one){
Systeiu.out.printin(e.getMessage());
}))
若輸入數(shù)據(jù)(data.in中的數(shù)據(jù))如下:
Aa00001926995
Bb00002779296
則程序輸出如下:
Aa
00001
92
69
95
Bb
00002
77
92
96
(五)、BufferedlnputStream^
BufferedOutputStream
有時(shí)候我們?cè)谔幚韥?lái)自輸入流的數(shù)據(jù)時(shí),希望能夠
重設(shè)流并回到較靠前的位置。
這需要使用緩沖來(lái)實(shí)現(xiàn),通過(guò)使用
BufferedlnputStream^:,可以利用mark和reset方
法在緩沖的輸入流中往回移動(dòng);
同時(shí),通過(guò)使用BufferedOutputStream類,可以先
將輸出寫到內(nèi)存緩沖區(qū),再使用flush方法將數(shù)據(jù)
寫入磁盤,而不必每輸出-一個(gè)字節(jié)就向磁盤中寫
一次數(shù)據(jù)。
1.BufferedlnputStream^:的構(gòu)造函數(shù)和方法
?BufferedInputStream(InputStreamin):構(gòu)造一個(gè)
BufferedlnputStream。
?BufferedInputStream(InputStreamin,intsize):構(gòu)造一個(gè)
具有給定的緩沖區(qū)大力、BufferedlnputStreamo
?intavailable():得到可以從這個(gè)輸入流讀取的字節(jié)數(shù)。
?voidclose():關(guān)閉流。
?voidmark(intreadlimit):在這個(gè)輸入流的當(dāng)前位置做標(biāo)記。
?booleanmarkSupported():檢查這個(gè)輸入流是否支持mark
和reset方法。
?intread():讀取數(shù)據(jù)的下一個(gè)字節(jié)。
?intread(byte[]b,intoff,intlen):從這個(gè)字節(jié)輸入流的給
定偏移量處開始讀取字節(jié),存儲(chǔ)到給定的字節(jié)數(shù)組。
?voidreset():將緩沖區(qū)重新設(shè)置到加標(biāo)記的位置。
?longskip(longn):跳過(guò)n個(gè)字節(jié)的數(shù)據(jù)。
2.BufferedOutputStream類的構(gòu)造函數(shù)和方法:
?BufferedOutputStream(OutputStreamout):構(gòu)造一個(gè)
BufferedOutputStream。
?BufferedOutputStream(OutputStreamout,intsize):構(gòu)
造一個(gè)具有給定的緩沖區(qū)大小的
BufferedOutputStream。
?voidflush():刷新這個(gè)流。
?voidwrite(byte[]b,intoff,intlen):將給定的字節(jié)數(shù)組
寫到這個(gè)緩沖輸出流。
?voidwrite(intb):將給定的字節(jié)寫到這個(gè)緩沖輸出流。
下面我們通過(guò)一個(gè)例子來(lái)演示BufferedlnputStream類的
作用,程序讀取并顯示字節(jié)數(shù)組中的字符,當(dāng)遇
至十%,字符時(shí),如果和下一個(gè),%,字符之間的字符
沒(méi)有空格,則兩個(gè),%,之間的字符不顯示:
importjava.io.*;
classbufinstrearns{
publicstaticvoidmain(Sttmaargs[])tiirowslOExcept.ion{
〃定義數(shù)據(jù)誨
bytedata口="Thisisatestofbuffervorreams.與匚口因口它11七二二”?9已七3¥七23();
BYteArraylnputStreamin=newByteArraylnput.Streaik(data);
BufferedlnputStreambufinstream=newBufferedlnput.Stream(in);
intcharacter;booleanflag=false;
while((character=bufinstream.read())?=-1){
switch(character){
caseT':例U?4
if(flag){〃第二個(gè)
flag=false;
}else{//第一個(gè)bufinstreams.java
flag=true;
bufinstream.mark(100);//力口標(biāo))己
break;
case,1:運(yùn)行結(jié)果:
if(flag)(//3
flagI
SystJThisisatestofbuffer#Streams
〃將4
bufirf
)else
Syst.em.out.print((char)character);
break;
default:
if(!flag)System.out..print((char)character);
)1))
二、字符流
盡管字節(jié)流更快更高效,但是人們讀起來(lái)十分困
難(因?yàn)槭嵌M(jìn)制)。
接下來(lái)我們講述文本格式的輸入輸出,即字符流。
字符流主要是用來(lái)支持Unicode的文字內(nèi)容,絕
大多數(shù)在字節(jié)流中所提供的類,都有相對(duì)應(yīng)的
字符流的類。
ReaderWriter
BufferedReaderPrintWriter
BufferedWriter
InputStreamReader
OutputStreamWriter
FileReader
FileWriter
()、Reader和Writer
Reader是所有輸入字符流的基類,Writer
是所有輸出字符流的基類。
你可以使用從這兩個(gè)類派生出的類來(lái)讀寫
字符流,這兩個(gè)類常用的方法與
Inputstream>Outputstream相類似,區(qū)
別在于參數(shù)內(nèi)的byte[]需要改為char
(二)、InputStreamReader和
OutputStreamWriter
為了從鍵盤讀取按鍵,常常從System.iii構(gòu)
造一個(gè)InputStreamReader流)然后使用
InputStreamReader^:的read方法讀取用
戶輸入的內(nèi)容。
而OutputStreamWriter與
InputStreamReader相對(duì))支持輸出流。
1.InputStreamReader^:的構(gòu)造函數(shù)和方法:
?InputStreamReader(InputStreamin):構(gòu)造一個(gè)
InputStreamReader。
?InputStreamReader(InputStreamin,Stringenc):
使用命名的字符編瑪構(gòu)造一個(gè)InputStreamReader。
?voidclose():關(guān)閉流。
?StringgetEncoding():得到字符編碼的名稱。
?intread():讀取一個(gè)字符。
?intread(char[]cbuf,intoff,intlen):將字符讀到
數(shù)組工
?booleanready():如果這個(gè)流已準(zhǔn)備好,返回
True。
2.OutputStreamWriter類的構(gòu)造函數(shù)和方法:
?OutputStreamWriter(OutputStreamout):構(gòu)造一個(gè)
OutputStreamWritero
?OutputStreamyVriter(OutputStreamout,Stringenc):使
用命名的字符編碼構(gòu)造一個(gè)OutputStreamWriter。
?voidclose():關(guān)閉流。
?voidflush():刷新流。
?StringgetEncoding():得到這個(gè)流使用的字符編碼的名稱。
?voidwrite(char[]cbuf,intoff,intlen):寫字符數(shù)組的一部
分。
?voidwrite(intc):寫一個(gè)字符。
?voidwrite(Stringstr,intoff,intlen):寫一個(gè)字符串的一部
分。
下面的程序利用InputStreamReader從鍵盤接受輸入,再將輸
入的字符顯示出來(lái):
inputstreamreader.java
importjava.io.*;
classinputstreamreader{
publicstaticvoidmam(Stringargs[]){例11-5
try1、
intcharacter;
InputstreaioP.eaderinstreaiaread=newInputStLeanF'.eader(System,in);
/Inputs(口reainReader以字符形式序取輸入
while((character=instreamread.read())1=-1){
Ystem.out.print((char)character);
catch(lOExcepnone)()
J
System,out.print(rrBye,r);
獷……八….一?
程序運(yùn)行結(jié)果如下:
輸入:a,bqd輸出:a9b9c9d
輸入:1,2,3,4輸出:1,2,3,4
輸入:AZ輸出:Bye
(三)、FileReader
你可以使用FileReader類創(chuàng)建一個(gè)字符流來(lái)讀取
一個(gè)文件,F(xiàn)ileReader類只具有女
InputStreamReader繼承的功能,但是它有自
己的構(gòu)造函數(shù):
?FileReader(Filefile):構(gòu)造一個(gè)FileReader。
?FileReader(FileDescriptorfd):從一個(gè)文件描
述符構(gòu)造一個(gè)FileReader。
?FileReader(Stringfilename):從一個(gè)文件名構(gòu)
造一個(gè)FileReader。
在下面的例子中,我們打開一個(gè)文件file.txt(內(nèi)容
為:"Hellofromfile”),將文件的內(nèi)容讀到緩沖
區(qū),然后顯示數(shù)據(jù):
fileread.java
importjava.io.*;例11-6
publicclassfileread{
publicstaticvoidmam(Stringargs[])throwsException
FileReaderfileread=newFileReadertxtH);
chardata[]=newchar[1024];
intcharsread=fileread.read(data);
System.out.printin(newString(data,0,charsread));
fileread,close();
)}
程序運(yùn)行結(jié)果如下:
Hellofromfile
(四)、FileWriter
FileWriter與FileReader對(duì)應(yīng),用來(lái)將1字符緩沖區(qū)中的數(shù)
據(jù)寫到文件中。這個(gè)類也只定義了構(gòu)造函數(shù),此外只
具宥灰OutputStreamWriter繼承的功能。
?FileWriter(Filefile):從File對(duì)象構(gòu)造一個(gè)FileWriter。
?FileWriter(FileDescriptorfd):從文件描述符構(gòu)造一
個(gè)FileWriter。
?FileWriter(Stringfilename):從文件名構(gòu)造一個(gè)
FileWritero
?FileWriter(Stringfilename,booleanappend):構(gòu)造一進(jìn)
行附加的FileWriter。
在下面例子中,我們分別采用三種方式:逐字符地寫數(shù)
據(jù)、一次寫入所有數(shù)據(jù)、分批寫數(shù)據(jù),使用FileWriter:
filewrite.java
importjava.io.*;例11-7
publicclassfilewrite{
publicstaticvoidmain(String[]args)throwsExceptionf
,,1
chardata口={'T?zh,,s/'/a'z
11111
?zo*,1f?,1'z*e'z'x'z,1.1);
FileWriterfilewriterl=newFilelJritertxtrr);
〃逐字符地寫數(shù)據(jù)
for(intloop_index=0;loop_index<data.length;loop_index-H-){
fileuriterl.write(data[1oop_index]);
}一
FileWriterfilevriterZ=newFileUnter(rrfile2.;
〃一次寫入所有敏據(jù)
fileuriter2.write(data);
FileUriterfileuriter3=newFileUriter(file3.txt^);
門分批寫人數(shù)據(jù)程序執(zhí)行后:
filevriter3.write(data,5
filewriterl.close();gel.txt和file2.txt的內(nèi)容為:
fileuriter2.close();Thisisastringoftext.
filewriter3.close();
))me3.txt的內(nèi)容為:isastrin
(五)、CharArrayReader^CharArrayWriter
1.CharArrayReader類的構(gòu)造函數(shù)和方法如下:
?CharArrayReader(char[]buf):從給定的字符數(shù)組構(gòu)造一個(gè)
CharArrayReader。
?CharArrayReader(char[]buf,intoffset,intlength):同上。
?voidclose():關(guān)閉流。
?voidmark(intreadAheadLimit):在流中的當(dāng)前位置加標(biāo)記。
?booleanmarkSupported():如臬這個(gè)流支持mark操作,那么
返回True。
?intread():讀取一個(gè)字符。
?intread(char[]b,intoff,intlen):4尋字符讀人數(shù)組的一部分。
?booleanready():檢查這個(gè)流是否已經(jīng)準(zhǔn)備好被讀取。
?voidreset():將流重設(shè)到最近的標(biāo)記。
?longskip(longn):跳過(guò)n個(gè)字符。
?CharArrayWriter():構(gòu)造一個(gè)CharArrayWriter。
?CharArrayWriter(intinitialSize):構(gòu)造一個(gè)具有給定初始大小
的CharArrayWritero
?voidclose():關(guān)閉流。
?voidflush():刷新流。
?voidreset():重設(shè)流。
?intsize():得到緩沖區(qū)的當(dāng)前大小。
?char[]toCharArray():得到輸入數(shù)據(jù)的副本。
?StringtoString():4尋輸入數(shù)據(jù)轉(zhuǎn)換為字符串。
?voidwrite(char[]c,intoff,intlen):將字符寫到緩沖區(qū)中。
?voidwrite(intc):羽1一個(gè)字符寫到緩沖區(qū)中。
?voidwrite(Stringstr,intoff,intlen):4尋字符串的一部分寫到緩
沖區(qū)中。
?voidwriteTo(Writerout):4等緩沖區(qū)的內(nèi)容寫到另一個(gè)字符流
中。
chararrayreader.java
importjava.io.*;例
publicclasschararrayreader{11-8
publicstaticvoidmain(Stringargs[])throwslOException{
chardata[]={*T1'h111',1s1'lull's'/'Ja',
1/叫
,、tJI,
CharArrayReaderchararrayreader=newCharArrayReader(data);
intcharacter;
while((character=chararrayreader.read()),=-1){
}}.}System.out.print—((char—)character);
程序運(yùn)行結(jié)果為:
Thisisastringoftext.
第3節(jié)文件的隨機(jī)訪問(wèn)
前面所提及的流都是順序的I/O流,無(wú)法隨
機(jī)的讀寫文件的某個(gè)位置,如果需要對(duì)
文件進(jìn)行隨機(jī)的訪問(wèn),必須使用
RandomAccessFile類)其常用的構(gòu)造函
數(shù)如下:
?RandomAccessFile(Filefile,Stringmode):構(gòu)造一個(gè)隨機(jī)訪
問(wèn)文件流,行能為被訪問(wèn)的文作好象,mode是用來(lái)指定存
取的模式,mode可改為r(讀)、w(寫)或rw(讀寫)。
?RandomAccessFile(Stringname.Stringmode):構(gòu)造一個(gè)隨
機(jī)訪問(wèn)文件流,以彳更訪商由字符串name指定名字的文件,
mode參數(shù)使用同上。
?RandomAccessFile類提供的用來(lái)讀取某種基本數(shù)據(jù)類型的
數(shù)據(jù)或字符串的方法如下:
?booleanreadBoolean()
?bytereadByte()
?charreadChar()
?doublereadDouble()
?floatreadFloat()
?intreadlnt()
?longreadLong()
?shortreadShort()
?StringreadLineQ
?RandomAccessFile類提供的用來(lái)向文件中寫入
某種基本類型的數(shù)據(jù)或字符串的方法如下:
?voidwriteByte(byteb)
?voidwriteBytes(Strings)
?voidwriteChar(charc)
?voidwriteChars(Strings)
?voidwriteDouble(doubled)
?voidwriteFloat(floatf)
?voidwritelnt(inti)
?voidwriteLong(long1)
?voidwriteShort(shorts)
-和目前文件位置有關(guān)的方法:
?voidseek(longpos):將文件指針移到
pos(不可為負(fù))的位置)這是相對(duì)于文
彳牛的初始位置的值(初始值為0)。
?longgetFilePointer():得至U目前文件指
針的位置(相對(duì)于文件初始位置)。
?longlengthQ:得至文件的長(zhǎng)度。
第4節(jié)目錄和文件管理
File類是一個(gè)和流無(wú)關(guān)的類。
File對(duì)象可以用來(lái)生成與文件(及其所在的路徑)
或目錄結(jié)構(gòu)相關(guān)的對(duì)象,
由于不同的系統(tǒng)可能會(huì)有不同的目錄結(jié)構(gòu)表示法,
使用File類可以達(dá)到與系統(tǒng)無(wú)關(guān)的目的(使用抽
象的路徑表示法)。
類java.io.File提供了獲得文件基本信息及操作文
件的一些方法。
File類的構(gòu)造函數(shù):
File(Stringpath):將一個(gè)代表路徑的字符串轉(zhuǎn)換為抽象的
路徑表示法。
File(Stringparent,Stringchild):parent代表目錄,child
代表文件(不可為空)。
File(Fileparent,Stringchild):同上。
例如:
FilemyFile;
myFile=newFile("行l(wèi)e.txt");
或
myFile=newFile("/","file,txt");
或
FilemyDir=newFile("/");
myFile=newFile(myDir,wfile.txf?);
使用何種構(gòu)造函數(shù)經(jīng)常由其他被訪問(wèn)的文
件對(duì)象來(lái)決定。
例如,
當(dāng)在應(yīng)用程序中只用到一個(gè)文件時(shí),那么
使用第一種構(gòu)造函數(shù)最為實(shí)用;
但是如果使用了一個(gè)共同目錄下的幾個(gè)文
件,則使用第二種或第三種構(gòu)造函數(shù)會(huì)
更方便。
File類一些常用的方法
?booleanexists():若該文件或目錄存在,返回True。
?booleanisDirectory():若為目錄則返回True。
?File[]listFiles():得前該對(duì)象所代表的目錄下的File對(duì)象數(shù)組。
?String[]list():同上。
?longlength。:得到和該對(duì)象相關(guān)的文件大小,若不存在,返回
Oo
?StringtoString():得到抽象路徑表示法。
?StringgetParent():得到抽象路徑表示法的目錄部分。
?StringgetName():得到抽象路徑表示法的最后一個(gè)部分。
?booleanrenameTo(FilenewName):^當(dāng)前File對(duì)象所代表的路
徑名改為newName所代表的路徑名。若成功,返回true。
?booleanmkdir():生成一個(gè)新的目錄。若成功,返回True。
?booleanmkdirs():生成一個(gè)新的目錄,包含子目錄。若成功,
返回true。
?booleandelete():刪除目前File對(duì)象代表的文件或目錄,目錄需
為空。刪除成功,返回true。
importjava.io.*;
classfile(
publicstaticvoidnain(5tring[]args){
Filefl=newFile(rftile.t>:tff);例11?9
System,out.printin("Tiefileisexist?rr+fl.exists());
5ysteia.out.println(,rTlietilecanwrite?r,+fl.canUrite());
System,out.printin(r,Tliefilecanread?rr+fl.canRead());
System,out.printin(nTliefile1程序運(yùn)行結(jié)果如下:
System,out.printin(n,HiefileiThefileisexist?true
System,out.printin(rrThefile1:Thefilecanwrite?true
rr1
System,out.printin(Thefile:Thefilecanread?true
Systeia.out.printin("Thefile'sThefileisafile?true
})Thefileisadirectory?false
The行Ie'snameis:file.txt
Thefile!sallpathis:C:\Java\file.txt
Thefile'slengthis15
第5節(jié)其他常用的流處理
一、管道流
管道(pipe)提供一種線程之間的通信方法,可用
于IPCQnter-ProcessCommunication進(jìn)程間通
信)或是ITC(Inter?ThreadCommunication線
程間通信),但不能夠在不同主機(jī)間進(jìn)行通信。
一個(gè)輸入管道是用來(lái)接收一個(gè)輸出管道所寫出的
數(shù)據(jù),因此,一個(gè)線程會(huì)負(fù)責(zé)送出
(PipedOutputStream對(duì)象)數(shù)據(jù),而另一個(gè)
線程序要負(fù)責(zé)接收(PipedlnputStream對(duì)象)
這些數(shù)據(jù),PipedlnputStream和
PipedOutputStream對(duì)象總是成對(duì)出現(xiàn)的。并
且由于管道的數(shù)據(jù)流是單向的
(一)、創(chuàng)建一組管道通信可以按照下面步驟進(jìn)
行(使用無(wú)參數(shù)的構(gòu)造函數(shù))
建立輸入流:
PipedlnputStreampipedinputstream=
newPipedIn
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村蓋房簽合同范本
- 鄉(xiāng)鎮(zhèn)庫(kù)房建造合同范本
- 創(chuàng)業(yè)老板合同范本
- 1997施工合同范本
- 公司購(gòu)買材料合同范本
- 保險(xiǎn)勞務(wù)合同范本
- mpp管采購(gòu)合同范本
- app廣告合同范本
- 加盟痘痘合同范本
- 住房公證合同范本
- 學(xué)院中層正副職民主測(cè)評(píng)表
- 不寧腿綜合征
- 檢修期間安全措施
- 2023年湖南中醫(yī)藥高等??茖W(xué)校單招考試職業(yè)技能考試模擬試題及答案解析
- 八年級(jí)數(shù)學(xué)下冊(cè)同步練習(xí)(全冊(cè))
- 機(jī)房工程機(jī)房建設(shè)驗(yàn)收?qǐng)?bào)告
- 安全生產(chǎn)條件核查表
- 冀教版六年級(jí)下冊(cè)數(shù)學(xué)全冊(cè)教案完整版教學(xué)設(shè)計(jì)(含教材分析、教學(xué)計(jì)劃及進(jìn)度表)
- GB/T 2951.21-2008電纜和光纜絕緣和護(hù)套材料通用試驗(yàn)方法第21部分:彈性體混合料專用試驗(yàn)方法-耐臭氧試驗(yàn)-熱延伸試驗(yàn)-浸礦物油試驗(yàn)
- 西師版六年級(jí)下冊(cè)數(shù)學(xué)課件(全冊(cè))
- 減數(shù)分裂和受精作用(第二課時(shí))課件-高一下學(xué)期生物人教版必修2
評(píng)論
0/150
提交評(píng)論