Java語言程序設(shè)計(jì):JAVA-9-輸入輸出_第1頁
Java語言程序設(shè)計(jì):JAVA-9-輸入輸出_第2頁
Java語言程序設(shè)計(jì):JAVA-9-輸入輸出_第3頁
Java語言程序設(shè)計(jì):JAVA-9-輸入輸出_第4頁
Java語言程序設(shè)計(jì):JAVA-9-輸入輸出_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

輸入/輸出本章內(nèi)容File類FileInputStream類與FileOutputStream類FileReader類與FileWriter類BufferedReader類與BufferedWriter類RandomAccessFile類DataInputStream類與DataOutputStream類ObjectInputStream類與ObjectOutputStream類序列化與克隆I/O流的基本原理與分類流:連接到文件的“管道”,分為輸入流和輸出流。Java應(yīng)用程序使用輸入流對(duì)象和輸出流對(duì)象來完成數(shù)據(jù)的讀寫。廣義文件:磁盤文件,鍵盤,顯示器,網(wǎng)絡(luò)等顯示器打印機(jī)磁盤文件網(wǎng)絡(luò)鍵盤鼠標(biāo)Java程序向文件寫數(shù)據(jù)從文件讀數(shù)據(jù)輸出流輸入流形象地說,輸入流對(duì)象和輸出流對(duì)象是兩個(gè)管道,當(dāng)需要讀寫文件時(shí)就打開閥門(調(diào)用write()方法和read()方法)I/O流分類1根據(jù)數(shù)據(jù)的流動(dòng)方向分為輸入流與輸出流2根據(jù)流處理的數(shù)據(jù)類型可分為字節(jié)流【二進(jìn)制數(shù)據(jù),聲音圖像等】與字符流【文本數(shù)據(jù)】。JDK1.5字節(jié)流字符流輸入流InputStreamReader輸出流OutputStreamWriter節(jié)點(diǎn)流與處理流根據(jù)流的功能層次分為節(jié)點(diǎn)流(底層流)與過濾流(上層流)

節(jié)點(diǎn)流一般用于直接從指定的位置進(jìn)行讀/寫操作,例如磁盤文件,內(nèi)存區(qū)域,網(wǎng)絡(luò)連接等。過濾流(也稱處理流)用于對(duì)其他輸入/輸出流進(jìn)行封裝,是面向用戶的。在實(shí)際應(yīng)用中,通常將節(jié)點(diǎn)流與過濾流結(jié)合起來使用。File類1File類是同文件或者目錄相關(guān)的一個(gè)類。

File對(duì)象主要用來獲取文件本身的一些信息,不涉及對(duì)文件的讀寫操作。2File類的構(gòu)造函數(shù):publicFile(Stringpathname)//使用pathname指定的路徑創(chuàng)建一個(gè)File對(duì)象publicFile(Stringparent,Stringchild)//使用parent+child指定的路徑創(chuàng)建一個(gè)File對(duì)象publicFile(Fileparent,Stringchild)//使用parent.toString()+child指定的路徑創(chuàng)建一個(gè)File對(duì)象Java虛擬機(jī)是根據(jù)構(gòu)造函數(shù)指定的字符串來和實(shí)際文件或文件夾關(guān)聯(lián)。如果文件或文件夾存在,則關(guān)聯(lián)成功,否則不發(fā)生關(guān)聯(lián)。文件的屬性File類的下列方法獲取文件本身的一些信息。

publicStringgetName()

獲取文件的名字。publicboolean

canRead()

判斷文件是否是可讀的。publicboolean

canWrite()

判斷文件是否可被寫入。publicbooleanexits()

判斷文件是否存在。publiclonglength()

獲取文件的長度(單位是字節(jié))。publicStringgetAbsolutePath()獲取文件的絕對(duì)路徑。publicStringgetParent()獲取文件的父目錄。publicboolean

isFile()

判斷文件是否是一個(gè)普通文件,而不是目錄。publicboolean

isDirectroy()

判斷文件是否是一個(gè)目錄。publicboolean

isHidden()

判斷文件是否是隱藏文件。publiclonglastModified()

獲取文件最后修改的時(shí)間。File舉例importjava.io.*;

publicclassE{ publicstaticvoidmain(String[]args){ Filef1=newFile(“D:\\3000\\a.java”);//假設(shè)不存在該文件 Filef2=newFile("c:\\1000"); System.out.println(f1.getName()+"的長度:"+f1.length()); System.out.println(f1.getName()+"絕對(duì)路徑:

"+f1.getAbsolutePath()); System.out.println(f2.getName()+“是文件嗎:"+f2.isFile()); } }a.java的長度:0a.java絕對(duì)路徑:D:\3000\a.java1000是文件嗎:falseimportjava.io.*;publicclassExample10_1{publicstaticvoidmain(String

args[]){Filef=newFile("C:\\ch10","Example10_1.java");

System.out.println(f.getName()+"是可讀的嗎:"+f.canRead());

System.out.println(f.getName()+"的長度:"+f.length());

System.out.println(f.getName()+"的絕對(duì)路徑"+f.getAbsolutePath());

Filefile=newFile("new.txt");

System.out.println("在當(dāng)前目錄下創(chuàng)建新文件"+file.getName());

if(!file.exists()){try{

file.createNewFile();

System.out.println("創(chuàng)建成功");}

catch(IOExceptionexp){}}}}1.創(chuàng)建目錄publicboolean

mkdir()2.列出目錄中的文件

publicString[]list()

用字符串形式返回目錄下的全部文件。

publicFile[]listFiles()

用File對(duì)象形式返回目錄下的全部文件。

publicString[]list(FilenameFilter

obj)

用字符串形式返回目錄下的指定類型的所有文件。

publicFile[]listFiles(FilenameFilter

obj)

用File對(duì)象形式返回目錄下的指定類型所有文件。上述兩方法的參數(shù)FilenameFilter是一個(gè)接口,該接口有一個(gè)方法:

publicbooleanaccept(Filedir,Stringname);目錄當(dāng)使用File類創(chuàng)建一個(gè)文件對(duì)象后,例如

Filefile=newFile("c:\\myletter","letter.txt");

◆如果c:\myletter目錄中沒有名字為letter.txt文件,文件對(duì)象file調(diào)用方法publicboolean

createNewFile();

可以在c:\myletter目錄中建立一個(gè)名字為letter.txt的文件。

◆文件對(duì)象調(diào)用方法publicbooleandelete()

可以刪除當(dāng)前文件,例如:

file.delete();

文件的創(chuàng)建與刪除文件與目錄創(chuàng)建舉例1importjava.io.*;publicclassB{publicstaticvoidmain(String[]args){Filef1=newFile("E:\\java\\a.java");try{

f1.createNewFile();}catch(Exceptione){}f1=newFile("E:\\java\\b.java");try{

f1.mkdir();}catch(Exceptione){}}}publicString[]list()//用字符串的形式返回目錄下所有的文件publicString[]listFiles()//用File對(duì)象形式返回目錄下的全部文件。publicString[]list(FilenameFilter

obj)//用字符串形式返回目錄下的指定類型的所有文件。publicFile[]listFiles(FilenameFilter

obj)//用File對(duì)象形式返回目錄下的指定類型所有文件。參數(shù)FilenameFilter是一個(gè)接口,該接口有一個(gè)方法:publicboolean

accept(File

dir,Stringname);列出目錄中的文件importjava.io.*;classFileAcceptimplementsFilenameFilter{Stringstr=null;

FileAccept(Strings){

str="."+s;}publicboolean

accept(File

dir,Stringname){returnname.endsWith(str);}}舉例publicclassExample9_1{publicstaticvoidmain(String

args[]){Filedir=newFile("D:/ch9);

//不可寫成D:\ch9,可以寫成D:\\ch9或D/ch9

FileAccept

acceptCondition=newFileAccept("java");FilefileName[]=dir.listFiles(acceptCondition);

for(inti=0;i<fileName.length;i++){

System.out.printf("\n文件名稱:%s,長度:%d",

fileName[i].getName(),fileName[i].length());}

booleanboo=false;

if(fileName.length>0)boo=fileName[0].delete();

if(boo)System.out.printf("\n文件:%s被刪除:",fileName[0].getName());}}用Runtime類聲明一個(gè)對(duì)象(Runtime類在java.lang包)

Runtimeec;然后使用該類的getRuntime()靜態(tài)方法創(chuàng)建這個(gè)對(duì)象:

ec=Runtime.getRuntime();ec可以調(diào)用exec(Stringcommand)方法打開本地機(jī)的可執(zhí)行文件或執(zhí)行一個(gè)操作。運(yùn)行可執(zhí)行文件舉例importjava.io.*;publicclassExample10_3{publicstaticvoidmain(String

args[]){try{Runtimece=Runtime.getRuntime();Filefile=newFile("c:/windows","Notepad.exe");

ce.exec(file.getAbsolutePath());file=newFile("C:\\ProgramFiles\\Internet

Explorer","IEXPLORE

");

ce.exec(file.getAbsolutePath());}

catch(Exceptione){

System.out.println(e);}}}文件流

java.io包提供了大量的流類,Java把InputStream抽象類的子類創(chuàng)建的流對(duì)象稱作字節(jié)輸入流、OutputStream抽象類的子類創(chuàng)建的流對(duì)象稱作字節(jié)輸出流,Java把Reader抽象類的子類創(chuàng)建的流對(duì)象稱作字符輸入流、Writer抽象類的子類創(chuàng)建的流對(duì)象稱作字符輸出流。針對(duì)不同的源或目的地,java.io包為程序提供了相應(yīng)的輸入流或輸出流,這些輸入、輸出流絕大部分都是InputStream、OutputStream、Reader或Writer的子類。FileInputStream類

FileInputStream類是InputStream的子類,稱為文件字節(jié)輸入流。按字節(jié)讀取文件中的數(shù)據(jù)。該類的所有方法都是從InputStream類繼承來的。使用輸入流通常包括4個(gè)基本步驟:(1)設(shè)定輸入流的源(2)創(chuàng)建指向源的輸入流(3)讓輸入流讀取源中的數(shù)據(jù)(4)關(guān)閉輸入流。1.構(gòu)造方法

使用FileInputStream類的下列構(gòu)造方法創(chuàng)建指向文件的輸入流。

FileInputStream(Stringname);

FileInputStream(Filefile);參數(shù)name和file指定的文件稱為輸入流的源。

例如,為了讀取一個(gè)名為myfile.dat的文件,建立一個(gè)文件輸入流對(duì)象,代碼如下:

try{FileInputStreamins=newFileInputStream("myfile.dat");}catch(IOExceptione){

System.out.println(e);}try{Filef=newFile("myfile.dat");

FileInputStream

istream=newFileInputStream(f);}catch(IOExceptione){

System.out.println(e);}2.使用輸入流讀取字節(jié)

文件字節(jié)流可以調(diào)用從父類繼承的read方法順序地讀取文件,只要不關(guān)閉流,每次調(diào)用read方法就順序地讀取文件中的其余內(nèi)容,直到文件的末尾或文件字節(jié)輸入流被關(guān)閉?!鬷ntread()

讀取單個(gè)字節(jié)的數(shù)據(jù),返回字節(jié)值(0~255整數(shù)),如果未讀出字節(jié)就返回-1。◆

intread(byteb[])

讀取b.length個(gè)字節(jié)到字節(jié)數(shù)組b中,返回實(shí)際讀取的字節(jié)數(shù)。如果到達(dá)文件的末尾,則返回-1?!?/p>

intread(byteb[],intoff,int

len)

讀取len個(gè)字節(jié)到字節(jié)數(shù)組b中,并返回實(shí)際讀取的字節(jié)數(shù)目。如果到達(dá)文件的末尾,則返回-1,參數(shù)off指定從字節(jié)數(shù)組的某個(gè)位置開始存放讀取的數(shù)據(jù)。舉例importjava.io.*;publicclassExample10_4{publicstaticvoidmain(String

args[]){

intn=-1;byte[]a=newbyte[100];try{Filef=newFile("Example10_4.java");

InputStreamin=newFileInputStream(f);

while((n=in.read(a,0,100))!=-1){Strings=newString(a,0,n);

System.out.print(s);}

in.close();}

catch(IOExceptione){

System.out.println("FilereadError"+e);}}}與FileInputStream類相對(duì)應(yīng)的類是FileOutputStream類。

FileOutputStream提供了基本的文件寫入能力,是OutputStream的子類,稱為文件字節(jié)輸出流。文件字節(jié)輸出流按字節(jié)將數(shù)據(jù)寫入到文件中。FileOutputStream類

使用輸出流通常包括4個(gè)基本步驟:(1)給出輸出流的目的地(2)創(chuàng)建指向目的地的輸出流(3)讓輸出流把數(shù)據(jù)寫入到目的地(4)關(guān)閉輸出流。1.構(gòu)造方法

使用FileOutputStream類的下列具有刷新功能的構(gòu)造方法創(chuàng)建指向文件的輸出流。FileOutputStream(Stringname);FileOutputStream(Filefile);參數(shù)name和file指定的文件稱為輸出流的目的地

輸出流的wirie方法以字節(jié)單位向目的地寫數(shù)據(jù)。

voidwrite(intn)

向目的地寫入單個(gè)字節(jié)。

voidwrite(byteb[])

向目的地寫入一個(gè)字節(jié)數(shù)組。

voidwrite(byteb[],int

off,int

len)

從字節(jié)數(shù)組中偏移量off處取len個(gè)字節(jié)寫到目的地。FileOutputStream流順序地寫文件,只要不關(guān)閉流,每次調(diào)用write方法就順序地向目的地寫入內(nèi)容,直到流被關(guān)閉。

2.使用輸出流寫字節(jié)

3.關(guān)閉流

通過調(diào)用close()方法,可以保證操作系統(tǒng)把流緩沖區(qū)的內(nèi)容寫到它的目的地,即關(guān)閉輸出流可以把該流所用的緩沖區(qū)的內(nèi)容沖洗掉(通常沖洗到磁盤文件上)。importjava.io.*;publicclassExample9_3{publicstaticvoidmain(String

args[]){Filefile=newFile("hello.txt");byteb[]="歡迎welcome".getBytes();try{FileOutputStreamout=newFileOutputStream(file);

out.write(b);

out.close();

FileInputStreamin=newFileInputStream(file);

intn=0;

while((n=in.read(b,0,2))!=-1){Stringstr=newString(b,0,n);

System.out.println(str);}}

catch(IOExceptione){

System.out.println(e);}}}importjava.io.*;publicclassExample10_5{publicstaticvoidmain(String

args[]){byte[]a="新年快樂".getBytes();byte[]b="HappyNewYear".getBytes();Filefile=newFile("a.txt");//輸出的目的地try{

OutputStreamout=newFileOutputStream(file);//指向目的地的輸出流System.out.println(file.getName()+"的大小:"+file.length()+"字節(jié)");//0字節(jié)

out.write(a);//向目的地寫數(shù)據(jù)

out.close();out=newFileOutputStream(file,true);//準(zhǔn)備向文件尾加內(nèi)容System.out.println(file.getName()+"的大小:"+file.length()+"字節(jié)");//8字節(jié)out.write(b,0,b.length);System.out.println(file.getName()+"的大小:"+file.length()+"字節(jié)");//22字節(jié)

out.close();}

catch(IOExceptione){

System.out.println("Error"+e);}}}

FileReader類是Reader的子類,稱為文件字符輸入流。文件字符輸入流按字符讀取文件中的數(shù)據(jù)。為了創(chuàng)建FileReader類的對(duì)象,可以使用下列構(gòu)造方法:

FileReader(Stringname)和FileReader(Filefile)

。

構(gòu)造方法參數(shù)指定的文件稱為輸入流的源,輸入流通過使用read()方法從輸入流讀出源中的數(shù)據(jù)。

FileReader類

Reader類提供的read方法以字符為單位順序地讀取源中的數(shù)據(jù)。

◆intread():輸入流調(diào)用該方法從源中讀取一個(gè)字符,該方法返回一個(gè)整數(shù)

.

◆intread(charb[]):輸入流調(diào)用該方法從源中讀取b.length個(gè)字符到字符數(shù)組b中,返回實(shí)際讀取的字符數(shù)目。

◆intread(charb[],intoff,int

len):輸入流調(diào)用該方法從源中讀取len個(gè)字符并存放到字符數(shù)組b中,返回實(shí)際讀取的字符數(shù)目。FileWriter類

FileWriter提供了基本的文件寫入能力。FileWriter類是Writer的子類,稱為文件字符輸出流。文件字符輸出流按字符將數(shù)據(jù)寫入到文件中。為了創(chuàng)建FileWriter類的對(duì)象,可以使用下列構(gòu)造方法:

FileWriter(Stringname);

FileWriter(Filefile);:構(gòu)造方法參數(shù)指定的文件稱為輸出流的目的地。

如果輸出流指向的文件不存在,Java會(huì)創(chuàng)建該文件,如果文件已存在,輸出流將刷新該文件(使得文件的長度為0)。

輸出流使用write()方法把數(shù)據(jù)寫入輸出流到達(dá)目的地。◆

publicvoidwrite(charb[])——寫b.length個(gè)字符到輸出流。◆

publicvoid.write(charb[],int

off,int

len)——從給定字符數(shù)組中起始于偏移量off處寫len個(gè)字符到輸出流,參數(shù)b是存放了數(shù)據(jù)的字符數(shù)組?!?/p>

voidwrite(Stringstr)——把字符串中的全部字符寫入到輸出流。◆

voidwrite(Stringstr,int

off,int

len)——從字符串str中起始于偏移量off處寫len個(gè)字符到輸出流。只要不關(guān)閉流,每次調(diào)用writer()方法就順序地向文件寫入內(nèi)容,直到流被關(guān)閉.importjava.io.*;publicclassEample9_4{publicstaticvoidmain(String

args[]){Filefile=newFile("hello.txt");charb[]="歡迎welcome".toCharArray();try{FileWriterout=newFileWriter(file,true);

out.write(b);

out.write("來到北京!");

out.close();

FileReaderin=newFileReader(file);

intn=0;

while((n=in.read(b,0,2))!=-1){Stringstr=newString(b,0,n);

System.out.print(str);}

in.close();}

catch(IOExceptione){

System.out.println(e);}}}importjava.io.*;publicclassExample10_6{publicstaticvoidmain(String

args[]){FilesourceFile=newFile("a.txt");//讀取的文件FiletargetFile=newFile("b.txt");//寫入的文件charc[]=newchar[19];//char型數(shù)組

try{Writerout=newFileWriter(targetFile,true);Readerin=newFileReader(sourceFile);

intn=-1;

while((n=in.read(c))!=-1){out.write(c,0,n);}

out.flush();

out.close();}

catch(IOExceptione){

System.out.println("Error"+e);}}

}importjava.io.*;publicclassE{

publicstaticvoidmain(String[]args){

chara[]="四月十二日10點(diǎn)發(fā)起總攻".toCharArray();

//轉(zhuǎn)換為字符數(shù)組

intn=0,m=0;

try{

Filef=newFile("secret.txt");

for(inti=0;i<a.length;i++)

a[i]=(char)(a[i]^'R');//按位異或,加密

FileWriterout=newFileWriter(f);

out.write(a,0,a.length);//將a中所有字符寫到文件中

out.close();

FileReaderin=newFileReader(f);

chartom[]=newchar[10];

System.out.println("密文:");

while((n=in.read(tom,0,10))!=-1){

//一次讀10個(gè)字符,放到數(shù)組中,n為實(shí)際讀到字符的個(gè)數(shù)

Strings=newString(tom,0,n);//將字符數(shù)組轉(zhuǎn)化為字符串

System.out.println(s);

}

in.close();

in=newFileReader(f);

System.out.println("開始解密:");

System.out.println("明文:");

while((n=in.read(tom,0,10))!=-1) {

for(inti=0;i<n;i++)

tom[i]=(char)(tom[i]^'R'); Strings=newString(tom,0,n);

System.out.println(s); }

in.close(); }catch(IOExceptione){

} } }能夠以行為單位讀寫文件BufferedReader和BufferedWriter類創(chuàng)建的對(duì)象稱作緩沖輸入、輸出流。二者的源和目的地必須是字符輸入流和字符輸出流。緩存文件底層流上層流緩沖流

BufferedReader類創(chuàng)建的對(duì)象稱為緩沖輸入流,該輸入流的指向必須是一個(gè)Reader流,稱為BufferedReader流的底層流,底層流負(fù)責(zé)將數(shù)據(jù)讀入緩沖區(qū)。BufferedReader流的源就是這個(gè)緩沖區(qū),緩沖輸入流再從緩沖區(qū)中讀取數(shù)據(jù)。將BufferedReader與FileReader連接,然后BufferedReader就可以按行讀取FileReader指向的文件?!?/p>

BufferedReader的構(gòu)造方法如下BufferedReader(Readerin)◆

BufferedReader流能夠讀取文本行,方法是readLine()?!艨梢韵駼ufferedReader傳遞一個(gè)Reader對(duì)象(如FileReader的實(shí)例)來創(chuàng)建一個(gè)BufferedReader對(duì)象:

FileReader

inOne=newFileReader("Student.txt")

BufferedReader

inTwo=newBufferedReader(inOne);然后inTwo調(diào)用readLine()順序讀取文件“Student.txt”的一行。

BufferedReader類

可以將BufferedWriter流和FileWriter流連接在一起,然后使用BufferedWriter流將數(shù)據(jù)寫到目的地。例如,

FileWriter

tofile=newFileWriter("hello.txt");

BufferedWriterout=newBufferedWriter(tofile);◆

BufferedReader流調(diào)用方法:

write(Stringstr)write(Strings,int

off,int

len)把字符串s或s的一部分寫入到目的地?!?/p>

BufferedWriter調(diào)用newLine()

向文件寫入一個(gè)回行.◆BufferedWriter調(diào)用flush()

刷新緩沖區(qū)。BufferedWriter類

importjava.io.*;publicclassExample9_5{publicstaticvoidmain(String

args[]){FilereadFile=newFile("Student.txt"),

writeFile=newFile("Hello.txt");try{FileReader

inOne=newFileReader("Student.txt");

BufferedReader

inTwo=newBufferedReader(inOne);

FileWriter

tofile=newFileWriter("hello.txt");

BufferedWriterout=newBufferedWriter(tofile);Strings=null;

inti=0;

while((s=inTwo.readLine())!=null){i++;

out.write(i+""+s);

out.newLine();}

out.flush();

out.close();

tofile.close();

inOne=newFileReader("hello.txt");

inTwo=newBufferedReader(inOne);

while((s=inTwo.readLine())!=null){

System.out.println(s);}

inOne.close();

inTwo.close();}

catch(IOExceptione){

System.out.println(e);}}}例如:test.txt是一套標(biāo)準(zhǔn)化考試的試題文件

.1.北京奧運(yùn)是什么時(shí)間開幕的?

A.2008-08-08B.2008-08-01C.2008-10-01D.2008-07-08********************2.下列哪個(gè)國家不屬于亞洲?

A.沙特B.印度C.巴西D.越南********************3.下列哪個(gè)國家最愛足球?

A.剛果B.越南C.老撾D.巴西********************4.下列哪種動(dòng)物屬于貓科動(dòng)物?

A.鬣狗B.犀牛C.大象D.獅子********************使用輸入流讀取試題文件,每次顯示試題文件中的一道題目。當(dāng)讀取到字符*時(shí),暫停讀取,等待用戶從鍵盤輸入答案。用戶做完全部題目后,程序給出用戶的得分。importjava.io.*;importjava.util.Scanner;publicclassExample9_6{publicstaticvoidmain(String

args[]){ScannerinputAnswer=newScanner(System.in);

intscore=0;

StringBufferanswer=newStringBuffer();//存放用戶的回答Stringresult="ACDD";//存放正確的答案try{

FileReader

inOne=newFileReader("test.txt");

BufferedReader

inTwo=newBufferedReader(inOne);Strings=null;

while((s=inTwo.readLine())!=null){

if(!s.startsWith("*"))

System.out.println(s);else{

System.out.print("輸入選擇的答案(A,B,C,D):");Stringstr=inputAnswer.nextLine();

try{charc=str.charAt(0);

answer.append(c);}

catch(StringIndexOutOfBoundsExceptionexp){

answer.append("*");}}}

inOne.close();

inTwo.close();}

catch(IOExceptionexp){}

for(inti=0;i<result.length();i++){

if(result.charAt(i)==answer.charAt(i)||

result.charAt(i)==answer.charAt(i)-32)score++;}

System.out.printf("最后的得分:%d\n",score);}}

例如:由英語句子構(gòu)成的文件english.txt(每句占一行):

Thearrowmissedthetarget.Theyrejectedtheuniondemand.Wheredoesthisroadgoto?按行讀取english.txt

,并在該行的后面尾加上該英語句子中含有的單詞數(shù)目,然后再將該行寫入到一個(gè)名字為englishCount.txt的文件中。程序運(yùn)行效果如圖。importjava.io.*;importjava.util.*;publicclassExample10_7{publicstaticvoidmain(String

args[]){FilefRead=newFile("english.txt");FilefWrite=newFile("englishCount.txt");try{Writerout=newFileWriter(fWrite);

BufferedWriter

bufferWrite=newBufferedWriter(out);Readerin=newFileReader(fRead);

BufferedReader

bufferRead=newBufferedReader(in);Stringstr=null;

while((str=bufferRead.readLine())!=null){

StringTokenizer

fenxi=newStringTokenizer(str);

intcount=fenxi.countTokens();

str=str+"句子中單詞個(gè)數(shù):"+count;

bufferWrite.write(str);

bufferWrite.newLine();}

bufferWrite.close();

out.close();in=newFileReader(fWrite);

bufferRead=newBufferedReader(in);Strings=null;

System.out.println(fWrite.getName()+"內(nèi)容:");

while((s=bufferRead.readLine())!=null){

System.out.println(s);}

bufferRead.close();

in.close();}

catch(IOExceptione){

System.out.println(e.toString());}}}publicDataInputStream(InputStreamin)創(chuàng)建的數(shù)據(jù)輸入流指向一個(gè)由參數(shù)in指定的底層輸入流publicDataOutputStream(OutputStreamout)創(chuàng)建的數(shù)據(jù)輸出流指向一個(gè)由參數(shù)out指定的底層輸出流數(shù)據(jù)流

DataInputStream和DataOutputStream類創(chuàng)建的對(duì)象稱為數(shù)據(jù)輸入流和數(shù)據(jù)輸出流。構(gòu)造方法:importjava.io.*;publicclassExample10_11{publicstaticvoidmain(String

args[]){Filefile=newFile("apple.txt");try{

FileOutputStream

fos=newFileOutputStream(file);

DataOutputStream

outData=newDataOutputStream(fos);outData.writeInt(100);outData.writeLong(123456);outData.writeFloat(3.1415926f);outData.writeDouble(987654321.1234);

outData.writeBoolean(true);

outData.writeChars("Howareyoudoing");}

catch(IOExceptione){}

try{

FileInputStream

fis=newFileInputStream(file);

DataInputStream

inData=newDataInputStream(fis);

System.out.println(inData.readInt());//讀取int數(shù)據(jù)

System.out.println(inData.readLong());//讀取long數(shù)據(jù)

System.out.println(+inData.readFloat());//讀取float數(shù)據(jù)

System.out.println(inData.readDouble());//讀取double數(shù)據(jù)

System.out.println(inData.readBoolean());//讀取boolean數(shù)據(jù)charc='\0';

while((c=inData.readChar())!='\0'){//'\0'表示空字符。

System.out.print(c);}}

catch(IOExceptione){}}}對(duì)象流ObjectInputStream和ObjectOutputStream類創(chuàng)建的對(duì)象稱為對(duì)象輸入流和對(duì)象輸出流。它的構(gòu)造方法是:publicObjectInputStream(InputStreamin)publicObjectOutputStream(OutputStreamout)◆對(duì)象輸出流調(diào)用writeObject(Object

obj)將一個(gè)對(duì)象obj寫入輸出流送往目的地

◆對(duì)象輸入流調(diào)用readObject()從源中讀取一個(gè)對(duì)象到程序中對(duì)象流只有序列化的對(duì)象才可以被寫到文件中。如果類中有類類型的成員變量,則必須保證該成員變量對(duì)應(yīng)的類也是可序列化的。序列化:一個(gè)類如果實(shí)現(xiàn)了Serializable接口,那么這個(gè)類創(chuàng)建的對(duì)象就是所謂序列化的對(duì)象。

importjava.io.*;publicclassTVimplementsSerializable{Stringname;

intprice;publicvoidsetName(Strings){name=s;}publicvoidsetPrice(intn){price=n;}publicStringgetName(){returnname;}publicint

getPrice(){returnprice;}}importjava.io.*;publicclassExample10_13{publicstaticvoidmain(String

args[]){TVchanghong=newTV();

changhong.setName("長虹電視");changhong.setPrice(5678);Filefile=newFile("television.txt");try{

FileOutputStream

fileOut=newFileOutputStream(file);

ObjectOutputStream

objectOut=newObjectOutputStream(fileOut);

objectOut.writeObject(changhong);

objectOut.close();

FileInputStream

fileIn=newFileInputStream(file);

ObjectInputStream

objectIn=newObjectInputStream(fileIn);

TVxinfei=(TV)objectIn.readObject();

objectIn.close();

xinfei.setName("新飛電視");xinfei.setPrice(6666);

System.out.println("changhong的名字:"+changhong.getName());

System.ou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論