




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第11章Java數(shù)據(jù)流
[內(nèi)容提要]
大部分程序都需要數(shù)據(jù)的輸入和輸出,
從鍵盤讀取數(shù)據(jù),
向文件寫入數(shù)據(jù)或從文件獲取數(shù)據(jù),
將數(shù)據(jù)通過打印機打印出來,
通過網(wǎng)絡(luò)進行信息交換
本章介紹Java標準程序庫中各種處理I/O操作的類
的用途及使用方法。
第1節(jié)輸入/輸出概念
一、流的概述
Java使用流(stream)來執(zhí)行輸入輸出(I/O)
的功能)流是一種數(shù)據(jù)的源頭和目的之
間的通信途徑。
用于讀入數(shù)據(jù)稱為輸入流(inputstream),
用于寫出數(shù)據(jù)稱為輸出流(outputstream)o
當像用流時需要使用java.io包,因此在涉及數(shù)
據(jù)流操作的程序中都要先導(dǎo)入java.io包:
importjava.io.*;
二、I/O類層次結(jié)構(gòu)
Java提供超過60個不同的流類型,這些流
類包含在上面提到的java.io包中,
四個基本的抽象類:
Inputstream、Outputstream、Reader和
Writero
你不能創(chuàng)建這四個類型的對象,但是其他
的方法的返回值可以是他們
InputStrearn
File
Outputstream
RandomAccessFile
Reader
StreaniTokemzer
Writer
圖11-1定義在java,io包中的流結(jié)構(gòu)
三、標準輸入輸出
在System類中有三個靜態(tài)域System,in、
System,out和System,err。
可以在標準位置使用這三個系統(tǒng)流進行I/O操作O
publicstaticInputstreamin
讀取字符數(shù)據(jù)的標準輸入流。
publicstaticPrintstreamout
顯示或打印輸出信息的標準輸出流
publicstaticPrintstreamerr
輸出錯誤信息的標準錯誤流。
importjava.io.“一八,入,入]、、,一
publicclasslODemo{例11-1:標準輸入輸出舉例
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);
!)
程序運行如下:
輸入:a,b,c,d輸出:a,b,c,d
輸入:AZ(注:輸入復(fù)合鍵CTRL-Z)輸出:programend
第2節(jié)文件的順序訪問
一、字節(jié)流
字節(jié)流是用來讀寫8位的數(shù)據(jù),由于不會對數(shù)據(jù)
作任何轉(zhuǎ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é)流輸出流的父類,因
尼所有源自于它的類也會繼承下列的方法:
voidwrite(intb):寫入一個字節(jié)的數(shù)據(jù)。
voidwrite(byte[]buttfer):講數(shù)組buffer的數(shù)據(jù)寫
入流。
voidwrite(byte[]9intoffsetintlen):從buffer[offset]
開始,寫入len個字節(jié)的數(shù)據(jù)。
voidflush():強制將buffer內(nèi)的數(shù)據(jù)寫入流。
voidclose():關(guān)閉流。
(二)、Inputstream
InputStream為所有的字節(jié)輸入流的父類,因此
所宥癰于它的類也會繼承下列的方法:
intread。:讀入一個字節(jié)的數(shù)據(jù),如果已達到文
件的末端,返回值為-L
intread(byte[]buffer):讀出buffer大小的數(shù)據(jù),
返回值為實際所讀由的字節(jié)。
intread(byte[]bufferJntoffsetjntlen):臀讀出的
數(shù)據(jù)從buffer[offset]開始,寫入len個字節(jié)至
bufferf,返回值為實際所讀出的字節(jié)數(shù)目。
intavailable():返回流內(nèi)可供讀取的字節(jié)數(shù)目。
longskip(longn):跳過n個字節(jié)的數(shù)據(jù),返回值
為實像所述過的數(shù)據(jù)數(shù)。
voidclose():關(guān)閉流。
(三)、FilelnputStream^FileOutputStream
FilelnputStream用來讀取一個文件,FileOutPutStream用
來修數(shù)據(jù)寫入文件。
常用的構(gòu)造函數(shù)如下:
FileInputStream(Stringname):打開文件name用來讀取
數(shù)據(jù)。
FileInputStream(Filefile):打開文件行l(wèi)e用來讀取數(shù)據(jù)。
FileOutputStream(Stringname):打開文件name用來寫入
數(shù)據(jù)。
FileOutputStream(Filefile):打開文件行l(wèi)e用來寫入數(shù)據(jù)。
FileOutputStream(Stringname,Booleanappend):孑丁開文
件name用來寫入數(shù)據(jù),若append為true,貝I寫入的數(shù)據(jù)
會加到原有文件后面,否則,覆蓋原有的文件。
將FileExam.java復(fù)制為FileExam.java.bako
1)程序首先打開FileExam.java文件,
2)使用read。將其內(nèi)容逐字節(jié)讀取出來(如果
返回值為則表明已到達文件尾端),
3)再使用write。將讀出的字節(jié)逐一寫入另一個
文件FileExam.java.bak中。
4)若文件無法打開(例如FileExam.java不存在)
或無法生成(FileExam.java.bak),會拋出
FileNotFoundException異常,若讀寫出錯,
則會拋出lOException異常。
5)最后,我們在finally中關(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立取字干
//■次向目標文件耳人一個字干
o\itFile.write(date);
1)
cat.cli(FlieNotFoiAiiclExcepcione)(//處理立件不存在詰;況
System.out;,printIn(e.gemessage());
}
cacch(IOExceptione){//處理工。號常
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)使用這兩個流類可以將數(shù)據(jù)轉(zhuǎn)換到一個數(shù)據(jù)類型為字
節(jié)類型的數(shù)組(bytearray)中,
2)ByteArraylnputStream^ByteArrayOutputStream^f-
沒有牽涉到真正的文件,他們使用內(nèi)存(一個流緩沖
區(qū))作為I/O流的源頭及目的。
3)ByteArrayInputstream用來從一個流緩沖區(qū)(字節(jié)數(shù)
組)中讀入數(shù)據(jù),
4)ByteArrayOutputStream用來將數(shù)據(jù)轉(zhuǎn)換至一個流緩
沖區(qū)中
5)由于流對象的內(nèi)容存放在內(nèi)存中,所以可提供較快的
操作。
常用的構(gòu)造函數(shù)如下:
ByteArrayInputStream(byte[]buffer):生成一個手節(jié)數(shù)組的
輸入流,并指定一個字節(jié)數(shù)組buffer為此輸入流的流緩沖區(qū)。
ByteArrayOutputStream():生成一個字節(jié)數(shù)組的輸出流,其
緩沖區(qū)的默認初始大小為32字節(jié),若有需要,緩沖區(qū)的大小
會隨之增加。
ByteArrayOutputStream(intsize):同上,但分配size字節(jié)的初
始大小給此緩沖區(qū)。
ByteArrayOutputStream的一些常用方法:
intsize():返回此流緩沖區(qū)的大小。
byte[]toByteArray():生成一個新的字節(jié)數(shù)組,并將流的內(nèi)
容復(fù)制到此字節(jié)數(shù)組。
StringtoString():I導(dǎo)流的內(nèi)容轉(zhuǎn)換為String對象。
下面程序讀入文件data.in,將其內(nèi)容寫入內(nèi)存中(一個字節(jié)數(shù)
組),接著轉(zhuǎn)換為String對象,并將1該String對象內(nè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對象內(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ù)據(jù)時,希望能夠
重設(shè)流并回到較靠前的位置。
這需要使用緩沖來實現(xiàn),通過使用
BufferedlnputStream^:,可以利用mark和reset方
法在緩沖的輸入流中往回移動;
同時,通過使用BufferedOutputStream類,可以先
將輸出寫到內(nèi)存緩沖區(qū),再使用flush方法將數(shù)據(jù)
寫入磁盤,而不必每輸出-一個字節(jié)就向磁盤中寫
一次數(shù)據(jù)。
1.BufferedlnputStream^:的構(gòu)造函數(shù)和方法
?BufferedInputStream(InputStreamin):構(gòu)造一個
BufferedlnputStream。
?BufferedInputStream(InputStreamin,intsize):構(gòu)造一個
具有給定的緩沖區(qū)大力、BufferedlnputStreamo
?intavailable():得到可以從這個輸入流讀取的字節(jié)數(shù)。
?voidclose():關(guān)閉流。
?voidmark(intreadlimit):在這個輸入流的當前位置做標記。
?booleanmarkSupported():檢查這個輸入流是否支持mark
和reset方法。
?intread():讀取數(shù)據(jù)的下一個字節(jié)。
?intread(byte[]b,intoff,intlen):從這個字節(jié)輸入流的給
定偏移量處開始讀取字節(jié),存儲到給定的字節(jié)數(shù)組。
?voidreset():將緩沖區(qū)重新設(shè)置到加標記的位置。
?longskip(longn):跳過n個字節(jié)的數(shù)據(jù)。
2.BufferedOutputStream類的構(gòu)造函數(shù)和方法:
?BufferedOutputStream(OutputStreamout):構(gòu)造一個
BufferedOutputStream。
?BufferedOutputStream(OutputStreamout,intsize):構(gòu)
造一個具有給定的緩沖區(qū)大小的
BufferedOutputStream。
?voidflush():刷新這個流。
?voidwrite(byte[]b,intoff,intlen):將給定的字節(jié)數(shù)組
寫到這個緩沖輸出流。
?voidwrite(intb):將給定的字節(jié)寫到這個緩沖輸出流。
下面我們通過一個例子來演示BufferedlnputStream類的
作用,程序讀取并顯示字節(jié)數(shù)組中的字符,當遇
至十%,字符時,如果和下一個,%,字符之間的字符
沒有空格,則兩個,%,之間的字符不顯示:
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){〃第二個
flag=false;
}else{//第一個bufinstreams.java
flag=true;
bufinstream.mark(100);//力口標)己
break;
case,1:運行結(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é)流更快更高效,但是人們讀起來十分困
難(因為是二進制)。
接下來我們講述文本格式的輸入輸出,即字符流。
字符流主要是用來支持Unicode的文字內(nèi)容,絕
大多數(shù)在字節(jié)流中所提供的類,都有相對應(yīng)的
字符流的類。
ReaderWriter
BufferedReaderPrintWriter
BufferedWriter
InputStreamReader
OutputStreamWriter
FileReader
FileWriter
()、Reader和Writer
Reader是所有輸入字符流的基類,Writer
是所有輸出字符流的基類。
你可以使用從這兩個類派生出的類來讀寫
字符流,這兩個類常用的方法與
Inputstream>Outputstream相類似,區(qū)
別在于參數(shù)內(nèi)的byte[]需要改為char
(二)、InputStreamReader和
OutputStreamWriter
為了從鍵盤讀取按鍵,常常從System.iii構(gòu)
造一個InputStreamReader流)然后使用
InputStreamReader^:的read方法讀取用
戶輸入的內(nèi)容。
而OutputStreamWriter與
InputStreamReader相對)支持輸出流。
1.InputStreamReader^:的構(gòu)造函數(shù)和方法:
?InputStreamReader(InputStreamin):構(gòu)造一個
InputStreamReader。
?InputStreamReader(InputStreamin,Stringenc):
使用命名的字符編瑪構(gòu)造一個InputStreamReader。
?voidclose():關(guān)閉流。
?StringgetEncoding():得到字符編碼的名稱。
?intread():讀取一個字符。
?intread(char[]cbuf,intoff,intlen):將字符讀到
數(shù)組工
?booleanready():如果這個流已準備好,返回
True。
2.OutputStreamWriter類的構(gòu)造函數(shù)和方法:
?OutputStreamWriter(OutputStreamout):構(gòu)造一個
OutputStreamWritero
?OutputStreamyVriter(OutputStreamout,Stringenc):使
用命名的字符編碼構(gòu)造一個OutputStreamWriter。
?voidclose():關(guān)閉流。
?voidflush():刷新流。
?StringgetEncoding():得到這個流使用的字符編碼的名稱。
?voidwrite(char[]cbuf,intoff,intlen):寫字符數(shù)組的一部
分。
?voidwrite(intc):寫一個字符。
?voidwrite(Stringstr,intoff,intlen):寫一個字符串的一部
分。
下面的程序利用InputStreamReader從鍵盤接受輸入,再將輸
入的字符顯示出來:
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);
獷……八….一?
程序運行結(jié)果如下:
輸入:a,bqd輸出:a9b9c9d
輸入:1,2,3,4輸出:1,2,3,4
輸入:AZ輸出:Bye
(三)、FileReader
你可以使用FileReader類創(chuàng)建一個字符流來讀取
一個文件,F(xiàn)ileReader類只具有女
InputStreamReader繼承的功能,但是它有自
己的構(gòu)造函數(shù):
?FileReader(Filefile):構(gòu)造一個FileReader。
?FileReader(FileDescriptorfd):從一個文件描
述符構(gòu)造一個FileReader。
?FileReader(Stringfilename):從一個文件名構(gòu)
造一個FileReader。
在下面的例子中,我們打開一個文件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();
)}
程序運行結(jié)果如下:
Hellofromfile
(四)、FileWriter
FileWriter與FileReader對應(yīng),用來將1字符緩沖區(qū)中的數(shù)
據(jù)寫到文件中。這個類也只定義了構(gòu)造函數(shù),此外只
具宥灰OutputStreamWriter繼承的功能。
?FileWriter(Filefile):從File對象構(gòu)造一個FileWriter。
?FileWriter(FileDescriptorfd):從文件描述符構(gòu)造一
個FileWriter。
?FileWriter(Stringfilename):從文件名構(gòu)造一個
FileWritero
?FileWriter(Stringfilename,booleanappend):構(gòu)造一進
行附加的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)造一個
CharArrayReader。
?CharArrayReader(char[]buf,intoffset,intlength):同上。
?voidclose():關(guān)閉流。
?voidmark(intreadAheadLimit):在流中的當前位置加標記。
?booleanmarkSupported():如臬這個流支持mark操作,那么
返回True。
?intread():讀取一個字符。
?intread(char[]b,intoff,intlen):4尋字符讀人數(shù)組的一部分。
?booleanready():檢查這個流是否已經(jīng)準備好被讀取。
?voidreset():將流重設(shè)到最近的標記。
?longskip(longn):跳過n個字符。
?CharArrayWriter():構(gòu)造一個CharArrayWriter。
?CharArrayWriter(intinitialSize):構(gòu)造一個具有給定初始大小
的CharArrayWritero
?voidclose():關(guān)閉流。
?voidflush():刷新流。
?voidreset():重設(shè)流。
?intsize():得到緩沖區(qū)的當前大小。
?char[]toCharArray():得到輸入數(shù)據(jù)的副本。
?StringtoString():4尋輸入數(shù)據(jù)轉(zhuǎn)換為字符串。
?voidwrite(char[]c,intoff,intlen):將字符寫到緩沖區(qū)中。
?voidwrite(intc):羽1一個字符寫到緩沖區(qū)中。
?voidwrite(Stringstr,intoff,intlen):4尋字符串的一部分寫到緩
沖區(qū)中。
?voidwriteTo(Writerout):4等緩沖區(qū)的內(nèi)容寫到另一個字符流
中。
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);
程序運行結(jié)果為:
Thisisastringoftext.
第3節(jié)文件的隨機訪問
前面所提及的流都是順序的I/O流,無法隨
機的讀寫文件的某個位置,如果需要對
文件進行隨機的訪問,必須使用
RandomAccessFile類)其常用的構(gòu)造函
數(shù)如下:
?RandomAccessFile(Filefile,Stringmode):構(gòu)造一個隨機訪
問文件流,行能為被訪問的文作好象,mode是用來指定存
取的模式,mode可改為r(讀)、w(寫)或rw(讀寫)。
?RandomAccessFile(Stringname.Stringmode):構(gòu)造一個隨
機訪問文件流,以彳更訪商由字符串name指定名字的文件,
mode參數(shù)使用同上。
?RandomAccessFile類提供的用來讀取某種基本數(shù)據(jù)類型的
數(shù)據(jù)或字符串的方法如下:
?booleanreadBoolean()
?bytereadByte()
?charreadChar()
?doublereadDouble()
?floatreadFloat()
?intreadlnt()
?longreadLong()
?shortreadShort()
?StringreadLineQ
?RandomAccessFile類提供的用來向文件中寫入
某種基本類型的數(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(不可為負)的位置)這是相對于文
彳牛的初始位置的值(初始值為0)。
?longgetFilePointer():得至U目前文件指
針的位置(相對于文件初始位置)。
?longlengthQ:得至文件的長度。
第4節(jié)目錄和文件管理
File類是一個和流無關(guān)的類。
File對象可以用來生成與文件(及其所在的路徑)
或目錄結(jié)構(gòu)相關(guān)的對象,
由于不同的系統(tǒng)可能會有不同的目錄結(jié)構(gòu)表示法,
使用File類可以達到與系統(tǒng)無關(guān)的目的(使用抽
象的路徑表示法)。
類java.io.File提供了獲得文件基本信息及操作文
件的一些方法。
File類的構(gòu)造函數(shù):
File(Stringpath):將一個代表路徑的字符串轉(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)常由其他被訪問的文
件對象來決定。
例如,
當在應(yīng)用程序中只用到一個文件時,那么
使用第一種構(gòu)造函數(shù)最為實用;
但是如果使用了一個共同目錄下的幾個文
件,則使用第二種或第三種構(gòu)造函數(shù)會
更方便。
File類一些常用的方法
?booleanexists():若該文件或目錄存在,返回True。
?booleanisDirectory():若為目錄則返回True。
?File[]listFiles():得前該對象所代表的目錄下的File對象數(shù)組。
?String[]list():同上。
?longlength。:得到和該對象相關(guān)的文件大小,若不存在,返回
Oo
?StringtoString():得到抽象路徑表示法。
?StringgetParent():得到抽象路徑表示法的目錄部分。
?StringgetName():得到抽象路徑表示法的最后一個部分。
?booleanrenameTo(FilenewName):^當前File對象所代表的路
徑名改為newName所代表的路徑名。若成功,返回true。
?booleanmkdir():生成一個新的目錄。若成功,返回True。
?booleanmkdirs():生成一個新的目錄,包含子目錄。若成功,
返回true。
?booleandelete():刪除目前File對象代表的文件或目錄,目錄需
為空。刪除成功,返回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程序運行結(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進程間通
信)或是ITC(Inter?ThreadCommunication線
程間通信),但不能夠在不同主機間進行通信。
一個輸入管道是用來接收一個輸出管道所寫出的
數(shù)據(jù),因此,一個線程會負責送出
(PipedOutputStream對象)數(shù)據(jù),而另一個
線程序要負責接收(PipedlnputStream對象)
這些數(shù)據(jù),PipedlnputStream和
PipedOutputStream對象總是成對出現(xiàn)的。并
且由于管道的數(shù)據(jù)流是單向的
(一)、創(chuàng)建一組管道通信可以按照下面步驟進
行(使用無參數(shù)的構(gòu)造函數(shù))
建立輸入流:
PipedlnputStreampipedinputstream=
newPipedIn
溫馨提示
- 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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)村蓋房簽合同范本
- 鄉(xiāng)鎮(zhèn)庫房建造合同范本
- 創(chuàng)業(yè)老板合同范本
- 1997施工合同范本
- 公司購買材料合同范本
- 保險勞務(wù)合同范本
- mpp管采購合同范本
- app廣告合同范本
- 加盟痘痘合同范本
- 住房公證合同范本
- 學(xué)院中層正副職民主測評表
- 不寧腿綜合征
- 檢修期間安全措施
- 2023年湖南中醫(yī)藥高等??茖W(xué)校單招考試職業(yè)技能考試模擬試題及答案解析
- 八年級數(shù)學(xué)下冊同步練習(全冊)
- 機房工程機房建設(shè)驗收報告
- 安全生產(chǎn)條件核查表
- 冀教版六年級下冊數(shù)學(xué)全冊教案完整版教學(xué)設(shè)計(含教材分析、教學(xué)計劃及進度表)
- GB/T 2951.21-2008電纜和光纜絕緣和護套材料通用試驗方法第21部分:彈性體混合料專用試驗方法-耐臭氧試驗-熱延伸試驗-浸礦物油試驗
- 西師版六年級下冊數(shù)學(xué)課件(全冊)
- 減數(shù)分裂和受精作用(第二課時)課件-高一下學(xué)期生物人教版必修2
評論
0/150
提交評論