第9章輸入輸出流_第1頁(yè)
第9章輸入輸出流_第2頁(yè)
第9章輸入輸出流_第3頁(yè)
第9章輸入輸出流_第4頁(yè)
第9章輸入輸出流_第5頁(yè)
已閱讀5頁(yè),還剩81頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

復(fù)習(xí)編寫(xiě)線程程序的主要方法?編寫(xiě)線程程序的主要步驟?講解編寫(xiě)線程程序的主要方法?繼承Thread類實(shí)現(xiàn)Runnable接口編寫(xiě)線程程序的主要步驟?繼承Thread類或?qū)崿F(xiàn)Runnable接口重寫(xiě)run方法定義線程對(duì)象啟動(dòng)線程分析程序的執(zhí)行過(guò)程(五個(gè)狀態(tài))?程序執(zhí)行機(jī)制解析?run()方法的出處?run()方法的調(diào)用過(guò)程?第九章輸入、輸出流

本章導(dǎo)讀1.文件2.文件字節(jié)流3.文件字符流4.從鍵盤讀取數(shù)據(jù)5.緩沖流6.?dāng)?shù)組流7.字符串流8.?dāng)?shù)據(jù)流9.管道流10.對(duì)象流11.序列化與對(duì)象克隆12.隨機(jī)讀寫(xiě)流13.文件鎖

java語(yǔ)言提供了豐富的流類(輸入輸出類:java.io包中),用于完成基本的輸入輸出到文件操作(文件及文件夾的管理)。一、基本概念

流的概念:是指計(jì)算機(jī)各部件的數(shù)據(jù)流動(dòng)。在java語(yǔ)言中,將不同類型的輸入輸出源(鍵盤、屏幕、文件、打印機(jī)等)抽象為流或數(shù)據(jù)流。按傳輸方向可分為:輸入流、輸出流

采用數(shù)據(jù)流處理輸入輸出的好處是,使輸入輸出操作獨(dú)立于相關(guān)設(shè)備,隱藏了具體的實(shí)現(xiàn)細(xì)節(jié),用戶只需在程序中操作統(tǒng)一規(guī)范的類及相關(guān)方法即可。

流式輸入輸出的特點(diǎn)是數(shù)據(jù)的的獲取和發(fā)送沿著數(shù)據(jù)序列的順序進(jìn)行,每次數(shù)據(jù)的讀寫(xiě)都必須等待它前面的數(shù)據(jù)讀寫(xiě)完畢之后才能讀寫(xiě)。輸入源輸出源程序讀取輸入流輸出流寫(xiě)入輸入輸出流按內(nèi)容可分為:字符流、字節(jié)流

字節(jié)流:將數(shù)據(jù)以二進(jìn)制的原始方式讀寫(xiě),不能分解、重組和理解這些數(shù)據(jù),每次讀寫(xiě)8位二進(jìn)制,因此稱為二進(jìn)制字節(jié)流或位流。字節(jié)流可以變換恢復(fù)到原來(lái)有意義的狀態(tài)。(處理字節(jié)數(shù)據(jù),二進(jìn)制文件,基本處理類為InputStream、OutputStream類)

字符流:一次讀寫(xiě)16位二進(jìn)制,并將其作為一個(gè)字符處理。(處理字符數(shù)據(jù),文本文件,基本處理類為Reader、Write)

緩沖流:若對(duì)數(shù)據(jù)流的每次操作以字節(jié)為單位進(jìn)行,每次讀出一個(gè)字節(jié),每次寫(xiě)入一個(gè)字節(jié),需要反復(fù)操作文件或設(shè)備。通常使用緩沖區(qū)(緩沖流)處理,當(dāng)寫(xiě)入數(shù)據(jù)時(shí),先寫(xiě)入到緩沖區(qū),等緩沖區(qū)慢后在寫(xiě)入外部設(shè)備;讀出數(shù)據(jù)時(shí)每次,先讀盡可能多的數(shù)據(jù)到緩沖區(qū)中,然后再?gòu)木彌_區(qū)讀出數(shù)據(jù)。用于避免反復(fù)讀寫(xiě)外部設(shè)備、提高輸入輸出效率。二、輸入輸出流類庫(kù)(importjava.io.*)

InputStream、OutputStream、Reader、Writer是抽象類,一般不直接使用這些類,而直接使用子類對(duì)應(yīng)某種設(shè)備;前兩個(gè)字節(jié)輸入輸出類常用于讀寫(xiě)圖片、聲音等二進(jìn)制文件,后兩個(gè)字符輸入輸出文件用于文本文件。

File用于對(duì)磁盤文件與文件夾的管理。

RandomAccessFile用于磁盤文件的隨機(jī)讀寫(xiě)。

9.1文件操作類一、File類概述對(duì)磁盤文件與文件夾的管理,建立磁盤文件建立File類對(duì)象,為磁盤指定文件名和程序中文件輸入輸出流操作做連接準(zhǔn)備

二、文件的屬性、目錄、創(chuàng)建及刪除、執(zhí)行例9-1importjava.io.*;classFileAcceptimplementsFilenameFilter{Stringstr=null;FileAccept(Strings){str="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(str);}}//設(shè)置文件過(guò)濾publicclassExample9_1{publicstaticvoidmain(Stringargs[]){Filedir=newFile("D:\\javats");FileAcceptacceptCondition=newFileAccept("java");FilefileName[]=dir.listFiles(acceptCondition);for(inti=0;i<fileName.length;i++){System.out.printf("\n文件名稱:%s,長(zhǎng)度:%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());}}列出指定文件夾下的文件,并刪除第一個(gè)文件publicclassExample9_1j1{publicstaticvoidmain(String[]args){intcs=0;Filedir=newFile("d:\\java");

filelist(dir,cs);}publicstaticvoidfilelist(Filedir,intcs){FilefileName[]=dir.listFiles();for(inti=0;i<fileName.length;i++){if(fileName[i].isDirectory()){System.out.println();for(intj=0;j<cs;j++)System.out.print("

");System.out.printf("目錄:%s",fileName[i].getName());

filelist(fileName[i],cs+1);}else{System.out.println();for(intj=0;j<cs;j++)System.out.print("

");System.out.printf("文件:%s",fileName[i].getName());}}}}importjava.io.File;classFileop{privateFilerootdir=newFile("D:\\TestFile");publicFileop(){System.out.println("根目錄:"+rootdir.getAbsolutePath());if(!rootdir.exists()){rootdir.mkdirs();

}createFile(rootdir,1);listFile(rootdir,1);delFile(rootdir,1);rootdir.delete();

}publicvoidcreateFile(FilecurrentFile,intnum){if(num<5){FiletmpFile=newFile(currentFile.getAbsolutePath()+"\\"+String.valueOf(num)+".txt");if(!tmpFile.exists()){try{tmpFile.createNewFile();

}catch(Exceptione){e.printStackTrace();

}

}tmpFile=newFile(currentFile.getAbsolutePath()+"\\"+String.valueOf(num));if(!tmpFile.exists()){tmpFile.mkdirs();createFile(tmpFile,num+1);

}

}

}publicvoidlistFile(Filefile,intnum)

{File[]files=file.listFiles();for(inti=0;i<files.length;i++){StringBufferkg=newStringBuffer();for(intj=0;j<num;j++){kg.append("");

}if(files[i].isDirectory()){System.out.println(kg+"第"+num+"級(jí)子文件夾:"+files[i].getAbsolutePath());

}else{System.out.println(kg+"第"+num+"級(jí)子文件:"+files[i].getAbsolutePath());

}

}for(inti=0;i<files.length;i++){if(files[i].isDirectory())listFile(files[i],num+1);

}

}publicvoiddelFile(Filefile,intnum)

{File[]files=file.listFiles();for(inti=0;i<files.length;i++){if(files[i].isDirectory()){delFile(files[i],num+1);

}files[i].delete();

}

}}publicclassExample9_1j2{publicstaticvoidmain(String[]args){newFileop();

}}例9-2importjava.io.*;publicclassExample9_2{publicstaticvoidmain(Stringargs[]){try{Runtimece=Runtime.getRuntime();//獲取當(dāng)前JVM的運(yùn)行環(huán)境ce.exec("javacExample9_1.java");Filefile=newFile("C:\\windows","Notepad.exe");ce.exec(file.getAbsolutePath());}catch(Exceptione){}}}9.2字節(jié)文件流操作(字節(jié)文件讀寫(xiě)操作)按自己讀取文件中的數(shù)據(jù),基本處理類為InputStream、OutputStream類,例9-3importjava.io.*;public

class

Example9_3{

public

static

voidmain(Stringargs[]){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);}

in.close();}

catch(IOExceptione){System.out.println(e);}}}publicclassExample9_3j1{privateFilef1=newFile("d:\\yhl.jpg");privateInputStreamfis;privateOutputStreamfos;publicExam(){try{Filef2=newFile("d:\\ml\\yhl.jpg");if(!f2.exists())f2.createNewFile();System.out.println("源文件路徑:"+f1.getAbsolutePath());System.out.println("目標(biāo)文件路徑:"+f2.getAbsolutePath());System.out.println("下面開(kāi)始復(fù)制文件**************");fis=newFileInputStream(f1);//文件字節(jié)輸入流

fos=newFileOutputStream(f2);//文件字節(jié)輸出流

inttmp=fis.read();while(tmp!=-1){fos.write(tmp);tmp=fis.read();}fis.close();fos.close();System.out.println("文件復(fù)制完成****************");}catch(FileNotFoundExceptione){System.out.println("文件沒(méi)找到!");e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){newExam();}}用字節(jié)流實(shí)現(xiàn)文件的復(fù)制publicclassExample9_3j2{publicstaticvoidmain(String[]args){try{Filef1=newFile("考拉.jpg");Filef2=newFile("考拉2.jpg");if(!f2.exists())f2.createNewFile();FileInputStreamfis;FileOutputStreamfos;fis=newFileInputStream(f1);fos=newFileOutputStream(f2);System.out.println("源文件路徑:"+f1.getAbsolutePath());System.out.println("目標(biāo)文件路徑:"+f2.getAbsolutePath());System.out.println("文件的大?。?+fis.available()+"字節(jié)");System.out.println("文件復(fù)制開(kāi)始**************");byte[]b=newbyte[fis.available()];fis.read(b);fos.write(b);System.out.println("文件復(fù)制完成**************");fis.close();fos.close();

}catch(FileNotFoundExceptione){System.out.println("文件沒(méi)找到!");e.printStackTrace();

}catch(IOExceptione){e.printStackTrace();

}

}}用字節(jié)流實(shí)現(xiàn)文件的復(fù)制9.3字符文件流操作(字符文件讀寫(xiě)操作)按字符讀寫(xiě)文件,一個(gè)漢字當(dāng)一個(gè)字符,基本處理類為Reader、Write,例9-4publicclassExample9_4{publicstaticvoidmain(Stringargs[]){Filefile=newFile("hello.txt");charb[]="歡迎welcome".toCharArray();try{FileWriterout=newFileWriter(file);out.write(b);out.write("來(lái)到北京!");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);}}}9.4緩沖流

若對(duì)數(shù)據(jù)流的每次操作以字節(jié)為單位進(jìn)行,每次讀出一個(gè)字節(jié),每次寫(xiě)入一個(gè)字節(jié),需要反復(fù)操作文件或設(shè)備。通常使用緩沖區(qū)(緩沖流)處理,當(dāng)寫(xiě)入數(shù)據(jù)時(shí),先寫(xiě)入到緩沖區(qū),等緩沖區(qū)慢后在寫(xiě)入外部設(shè)備;讀出數(shù)據(jù)時(shí)每次,先讀盡可能多的數(shù)據(jù)到緩沖區(qū)中,然后再?gòu)木彌_區(qū)讀出數(shù)據(jù)。用于避免反復(fù)讀寫(xiě)外部設(shè)備、提高輸入輸出效率。

BufferedInputStream、BufferedReader

BufferedOutputStream、BufferedWriter

flush例9-5publicclassExample9_5{publicstaticvoidmain(Stringargs[]){try{FileReaderinOne=newFileReader("d:\\Student.txt");BufferedReaderinTwo=newBufferedReader(inOne);FileWritertofile=newFileWriter("d:\\hello.txt");BufferedWriterout=newBufferedWriter(tofile);Strings=null;inti=0;while((s=inTwo.readLine())!=null){i++;out.write(i+""+s);out.newLine();}out.flush();//刷新緩沖區(qū),強(qiáng)制寫(xiě)出所有數(shù)據(jù)

out.close();tofile.close();inOne=newFileReader("d:\\hello.txt");inTwo=newBufferedReader(inOne);while((s=inTwo.readLine())!=null){System.out.println(s);}inOne.close();inTwo.close();}catch(IOExceptione){System.out.println(e);}}}9.8對(duì)象流將對(duì)象進(jìn)行輸入輸出保證對(duì)象必須是序列化的,并且對(duì)象成員也必須是支持序列化的ObjectInputStream類

writeObject()方法ObjectOutputStream類

readObject()方法序列化:把一個(gè)對(duì)象完全轉(zhuǎn)成字節(jié)序列,方便傳輸。

就像你寄一箱餅干,因?yàn)轶w積太大,就全壓成粉末緊緊地一包包寄出去,這就是序列化的作用。只不過(guò)JAVA的序列化是可以完全還原的。例9-10importjava.io.*;classGoodsimplementsSerializable{Stringname=null;doubleprice;Goods(Stringname,doubleprice){=name;this.price=price;}publicStringgetName(){returnname;}publicdoublegetPrice(){returnprice;}}publicclassExample9_10{publicstaticvoidmain(Stringargs[]){Goodstv1=newGoods("HaierTV",3468);Filefile=newFile("d:\\text.txt");if(!file.exists()){try{file.createNewFile();}catch(IOExceptione){e.printStackTrace();}}try{FileOutputStreamfos=newFileOutputStream(file);//創(chuàng)建文件輸出流對(duì)象

ObjectOutputStreamoos=newObjectOutputStream(fos);//創(chuàng)建對(duì)象輸出流對(duì)象

oos.writeObject(tv1);

FileInputStreamfis=newFileInputStream(file);//創(chuàng)建文件輸入流對(duì)象

ObjectInputStreamois=newObjectInputStream(fis);//創(chuàng)建對(duì)象輸入流對(duì)象

Goodstv2=(Goods)ois.readObject();

System.out.println(tv2.getName());System.out.println(tv2.getPrice());}catch(Exceptionevent){System.out.println(event);}}}classStudentimplementsSerializable{intxh;Stringxm;intcj;Student(){}Student(intxh,Stringxm,intcj){this.xh=xh;this.xm=xm;this.cj=cj;}publicStringtoString(){Stringstr="學(xué)號(hào):"+xh+",姓名:"+xm+",成績(jī):"+cj;returnstr;}}publicclassExample9_10j1{@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{Filefile=newFile("d:\\text.txt");if(!file.exists()){file.createNewFile();}FileOutputStreamfos=newFileOutputStream(file);//創(chuàng)建文件輸出流對(duì)象ObjectOutputStreamoos=newObjectOutputStream(fos);//創(chuàng)建對(duì)象輸出流對(duì)象FileInputStreamfis=newFileInputStream(file);//創(chuàng)建文件輸入流對(duì)象ObjectInputStreamois=newObjectInputStream(fis);//創(chuàng)建對(duì)象輸入流對(duì)象ArrayList<Student>list=newArrayList<Student>();list.add(newStudent(1,"王平",95));//向容器類添加數(shù)據(jù)

list.add(newStudent(2,"李娜",89));list.add(newStudent(3,"張華",85));list.add(newStudent(4,"劉麗",88));list.add(newStudent(5,"劉曾",95));//向容器類添加數(shù)據(jù)

oos.writeObject(list);ArrayList<Student>listd=newArrayList<Student>();

listd=(ArrayList<Student>)ois.readObject();System.out.println("全部數(shù)據(jù):");for(inti=0;i<listd.size();i++){System.out.println(listd.get(i).toString());}}}例10-加1:ArrayList容器類讀寫(xiě)publicclassExample9_10j2{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{Filefile=newFile("d:\\text.txt");if(!file.exists()){file.createNewFile();}FileOutputStreamfos=newFileOutputStream(file);//創(chuàng)建文件輸出流對(duì)象ObjectOutputStreamoos=newObjectOutputStream(fos);//創(chuàng)建對(duì)象輸出流對(duì)象FileInputStreamfis=newFileInputStream(file);//創(chuàng)建文件輸入流對(duì)象ObjectInputStreamois=newObjectInputStream(fis);//創(chuàng)建對(duì)象輸入流對(duì)象Students[]={newStudent(1,"王平",95),//向容器類添加數(shù)據(jù)

newStudent(2,"李娜",89),newStudent(3,"張華",85),newStudent(4,"劉麗",88)};//向容器類添加數(shù)據(jù)}oos.writeObject(s);Studento[]=(Student[])ois.readObject();System.out.println("全部數(shù)據(jù):");for(inti=0;i<o.length;i++){System.out.println(o[i].toString());}}}例10-加2:對(duì)象數(shù)組讀寫(xiě)結(jié)束數(shù)據(jù)流流:源于UNIX操作系統(tǒng)對(duì)數(shù)據(jù)的理解有結(jié)構(gòu)的數(shù)據(jù)流式數(shù)據(jù)反映到文件對(duì)應(yīng)有相應(yīng)的流式操作例如重定向、管道數(shù)據(jù)流數(shù)據(jù)流是指所有的數(shù)據(jù)通信通道,或是程序和外界進(jìn)行數(shù)據(jù)交換的通道。輸入源輸出源程序讀取輸入流輸出流寫(xiě)入輸入流:用于輸入數(shù)據(jù)到程序的流。輸出流:用于從程序輸出數(shù)據(jù)的流;輸入輸出是針對(duì)程序而言JavaAPI中通過(guò)類庫(kù)java.io和java.nio(JDK1.4)來(lái)實(shí)現(xiàn)I/O處理。字節(jié)流stream從InputStream和OutputStream派生出來(lái)的一系列類。這類流以字節(jié)(byte)為基本處理單位。字符流reader&writer從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位。InputStream 抽象的字節(jié)輸入流類OuputStream 抽象的字節(jié)輸出流類Reader 抽象的字符輸入流類Writer 抽象的字符輸出流9.1文件(java.io包)File的構(gòu)造方法:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);文件常用方法PublicStringgetName()獲取文件的名字。PublicbooleancanRead()判斷文件是否是可讀PublicbooleancanWrite()判斷文件是否可被寫(xiě)入Publicbooleanexits()判斷文件是否存在。Publiclonglength()獲取文件的長(zhǎng)度(字節(jié))。PublicStringgetAbsolutePath()獲取文件的絕對(duì)路徑。PublicStringgetParent()獲取文件的父目錄。PublicbooleanisFile()判斷文件是否是一個(gè)文件而不是目錄。PublicbooleanisDirectroy()判斷文件是否是一個(gè)目錄。PublicbooleanisHidden()判斷文件是否是隱藏文件。PubliclonglastModified()獲取文件最后修改的時(shí)間目錄創(chuàng)建目錄publicbooleanmkdir():創(chuàng)建一個(gè)目錄,如果創(chuàng)建成功返回true。列出目錄中的文件publicString[]list()用字符串形式返回目錄下的全部文件。publicFile[]listFiles()用File對(duì)象形式返回目錄下的全部文件。publicString[]list(FilenameFilterobj)該方法用字符串形式返回目錄下的指定類型的所有文件。publicFile[]listFiles(FilenameFilterobj)該方法用File對(duì)象返回目錄下的指定類型所有文件。當(dāng)需要列出目錄下指定類型文件如.java、.txt等時(shí)FilenameFilter是個(gè)接口publicinterfaceFilenameFilter{booleanaccept(File

dir,String

name)}list方法執(zhí)行時(shí)不斷回調(diào)接口方法,當(dāng)返回true時(shí)將文件放入數(shù)組,故使用時(shí)需實(shí)現(xiàn)accept方法。參數(shù)name為目錄中的文件名參數(shù)dir為調(diào)用list的當(dāng)前對(duì)象3.文件的創(chuàng)建與刪除當(dāng)使用File類創(chuàng)建一個(gè)文件對(duì)象后文件對(duì)象調(diào)用方法:

publicbooleancreateNewFile()建立文件。文件對(duì)象調(diào)用方法:

publicbooleandelete()刪除當(dāng)前文件。importjava.io.*;publicclassDemoCreateFile{publicstaticvoidmain(String[]args){FiledirFile;FilecrateFile;booleandirExits;dirExits=false;try{dirFile=newFile("E:\\test");dirExits=dirFile.exists();if(dirExits==true){System.out.println("目錄已經(jīng)存在不需要?jiǎng)?chuàng)建");}else{System.out.println("目錄不存在需要?jiǎng)?chuàng)建");dirExits=dirFile.mkdir();

if(dirExits==true){System.out.println("創(chuàng)建成功");}else{System.out.println("不能創(chuàng)建目錄");System.exit(0);}}System.out.println("開(kāi)始創(chuàng)建文件");crateFile=newFile("E:\\test\\letter.txt");dirExits=crateFile.createNewFile();}catch(IOExceptione){}if(dirExits==true)System.out.println("文件創(chuàng)建成功");}}crateFile=newFile("E:\\test","letter.txt");importjava.io.*;classFileAcceptimplementsFilenameFilter{Stringstr=null;FileAccept(Strings){str="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(str);}}列出指定類型文件和刪除文件publicclassExample9_1{publicstaticvoidmain(Stringargs[]){Filedir=newFile("D:/ch8");FileAcceptacceptCondition=newFileAccept("java");FilefileName[]=dir.listFiles(acceptCondition);for(inti=0;i<fileName.length;i++){System.out.printf("\n文件名稱:%s,長(zhǎng)度:%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());}}不可寫(xiě)成D:\ch8,可以寫(xiě)D:\\ch8

4.運(yùn)行可執(zhí)行文件(Runtime類)創(chuàng)建Runtime類對(duì)象Runtimeec=Runtime.getRuntime();ec調(diào)用exec(Stringcommand)方法打開(kāi)本地機(jī)的可執(zhí)行文件或執(zhí)行一個(gè)操作。importjava.io.*;publicclassExample9_2{publicstaticvoidmain(Stringargs[]){try{Runtimece=Runtime.getRuntime();ce.exec("javacExample9_1.java");Filefile=newFile("C:\\windows","Notepad.exe");ce.exec(file.getAbsolutePath());}catch(Exceptione){}}}9.2文件字節(jié)流FileInputStream類(InputStream子類)

構(gòu)造方法:FileInputStream(Stringname)FileInputStream(Filefile)

try{FileInputStreamins=newFileInputStream(“myfile.dat”);}catch(IOExceptione){}try{Filef=newFile(“myfile.dat”);FileInputStreamistream=newFileInputStream(f);}catch(IOExceptione){}可能拋出FileNotFoundException方法:publicintread()throwsIOException

read方法從輸入流中順序讀取單個(gè)字節(jié)的數(shù)據(jù)。該方法返回字節(jié)值,讀取位置到達(dá)文件末尾則返回-1publicvoidclose()throwsIOException關(guān)閉此文件輸入流并釋放與此流有關(guān)的所有系統(tǒng)資源

publicintavailable()輸入流中剩余字節(jié)數(shù)

publiclongskip(long

n)從輸入流中跳過(guò)并丟棄n個(gè)字節(jié)的數(shù)據(jù)publicintread(byte[]

b)publicintread(byte[]

b,int

off,int

len)返回讀取字節(jié)數(shù)2.FileOutputStream類構(gòu)造方法:FileOutputStream(Stringname)FileOutputStream(Filefile)輸出流通過(guò)使用write()方法把數(shù)據(jù)寫(xiě)入輸出流到達(dá)目的地。寫(xiě)入時(shí)若文件存在則刷新,不存在創(chuàng)建。其它方法參考FileInputStreamwrite(int

b)write(byte[]

b)write(byte[]

b,int

off,int

len)拋出IOException可能拋出FileNotFoundExceptionimportjava.io.*;publicclassExample9_3{publicstaticvoidmain(Stringargs[]){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);}}}while((n=in.read())!=-1){System.out.println((char)n);}作業(yè)顯示Java源程序?qū)崿F(xiàn)Java源程序的復(fù)制選作:按照16進(jìn)制顯示Java源程序,把顯示結(jié)果另存為一個(gè)文件。3改進(jìn):參照UltraEdit樣式顯示源程序9.3文件字符流FileReader類(

Reader子類)構(gòu)造方法:FileReader(

Stringname)FileReader(Filefile)可能拋出FileNotFoundExceptionintread()

從源中讀取一個(gè)字符,該方法返回一個(gè)整數(shù)(Unicode字符值),如果未讀出字符就返回-1。

intread(charb[])

從源中讀取b.length個(gè)字符到字符數(shù)組b中,返回實(shí)際讀取的字符數(shù)目。如果到達(dá)文件的末尾,則返回-1。intread(charb[],intoff,intlen)

從源中讀取len個(gè)字符并存放到字符數(shù)組b中,返回實(shí)際讀取的字符數(shù)目。如果到達(dá)文件的末尾,則返回-1。

2.FileWriter類構(gòu)造方法:FileWriter(Stringname)FileWriter(Filefile)輸出流通過(guò)使用write()方法把字符數(shù)據(jù)寫(xiě)入輸出流到達(dá)目的地??赡軖伋鯢ileNotFoundExceptionwrite的用法:publicvoidwrite(charb[])程序?qū)慴.length個(gè)字符到輸出流。publicvoid.write(charb[],intoff,intlen)程序從給定字符數(shù)組中起始于偏移量off處寫(xiě)len個(gè)字符到輸出流,參數(shù)b是存放了數(shù)據(jù)的字符數(shù)組。voidwrite(Stringstr)程序把字符串中的全部字符寫(xiě)入到輸出流。voidwrite(Stringstr,intoff,intlen)程序從字符串str中起始于偏移量off處寫(xiě)len個(gè)字符到輸出流。importjava.io.*;publicclassExample9_4{publicstaticvoidmain(Stringargs[]){Filefile=newFile("hello.txt");charb[]="歡迎welcome".toCharArray();try{FileWriterout=newFileWriter(file);out.write(b);out.write("來(lái)到北京!");out.close();FileReaderin=newFileReader(file);intn=0;while((n=in.read(b,0,2))!=-1){Stringstr=newString(b,0,n);System.out.println(str);}in.close();}catch(IOExceptione){System.out.println(e);}}}while((n=in.read())!=-1){System.out.println((char)n);}作業(yè)顯示Java源程序?qū)崿F(xiàn)Java源程序的復(fù)制要求:使用Reader、Writer實(shí)現(xiàn)作業(yè)顯示Java源程序?qū)崿F(xiàn)Java源程序的復(fù)制要求:使用Reader、Writer實(shí)現(xiàn)9.4從鍵盤讀取數(shù)據(jù)java.lang包中的System類有兩個(gè)重要的類成員:in和out,分別是輸入流和輸出流類型的對(duì)象。in的源是鍵盤,in可以讀取用戶從鍵盤鍵入的數(shù)據(jù)。

Scanner類可以使用in初始化一個(gè)對(duì)象:Scannerreader=newScanner(System.in);

reader對(duì)象調(diào)用方法,讀取用戶在命令行輸入的各種數(shù)據(jù)類型。out流的目的地是命令行窗口,out調(diào)用方法可以將數(shù)據(jù)送到命令行窗口。練習(xí)題目:從鍵盤讀入x、y的值,顯示x+y的結(jié)果分析輸入:x、y計(jì)算:x+y輸出:結(jié)果9.5緩沖流BufferedReader類構(gòu)造方法:BufferedReader(Readerin)通過(guò)向BufferedReader傳遞一個(gè)Reader對(duì)象來(lái)創(chuàng)建一個(gè)BufferedReader對(duì)象。BufferedReader流除了有read()方法外,還能夠讀取文本行,使用方法readLine()。FileReaderinOne=newFileReader(“Student.txt”);BufferedReaderinTwo=newBufferedReader(inOne);2.BufferedWriter類構(gòu)造方法:publicBufferedWriter(Writer

out)BufferedReader流常用方法:

voidwrite(Stringstr)voidwrite(Strings,intoff,intlen)把字符串s或s的一部分寫(xiě)入到目的地。voidflush()刷新該流的緩沖

voidnewLine()寫(xiě)入一個(gè)行分隔符。

FileWritertofile=newFileWriter("hello.txt");BufferedWriterout=newBufferedWriter(tofile);importjava.io.*;publicclassExample9_5{publicstaticvoidmain(Stringargs[]){ try{ FileReaderinOne=newFileReader("Student.txt");BufferedReaderinTwo=newBufferedReader(inOne);FileWritertofile=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);}}}練習(xí)題目:設(shè)計(jì)一個(gè)二進(jìn)制文件復(fù)制的例子分析二進(jìn)制文件與文本文件的異同復(fù)制的實(shí)現(xiàn)過(guò)程測(cè)試性能改進(jìn)每次實(shí)現(xiàn)一塊的復(fù)制9.6數(shù)組流字節(jié)輸入流:ByteArrayInputStream字節(jié)輸出流:ByteArrayOutputStream分別使用字節(jié)數(shù)組作為流的源和目標(biāo)。ByteArrayInputStream流構(gòu)造方法:ByteArrayInputStream(byte[]buf)ByteArrayInputStream(byte[]buf,intoffset,intlength)

數(shù)組字節(jié)流讀寫(xiě)操作不會(huì)發(fā)生IOException異常ByteArrayOutputStream流的構(gòu)造方法:

ByteArrayOutputStream()ByteArrayOutputStream(intsize)數(shù)組字節(jié)輸出流調(diào)用publicbyte[]toByteArray()方法,可以返回輸出流寫(xiě)入到緩沖區(qū)的全部字節(jié)。importjava.io.*;publicclassExample9_6{publicstaticvoidmain(Stringargs[]){intn=-1;ByteArrayOutputStreamout=newByteArrayOutputStream();for(inti=1;i<=127;i++){out.write(i);}ByteArrayInputStreamin=newByteArrayInputStream(out.toByteArray());while((n=in.read())!=-1){if(n%2==0){System.out.printf("\n");}System.out.printf("\t字節(jié)%d,對(duì)應(yīng)字符\'%c\'",n,(char)n);}}}與數(shù)組字節(jié)流對(duì)應(yīng)的是數(shù)組字符流:CharArrayReader與CharArrayWriter類。數(shù)組字符流分別使用字符數(shù)組作為流的源和目標(biāo)。與數(shù)組字節(jié)流不同的是,數(shù)組字符流的讀操作可能發(fā)生IOException異常。importjava.io.*;publicclassExample9_7{publicstaticvoidmain(Stringargs[]){intn=-1;CharArrayWriterout=newCharArrayWriter();for(inti=20320;i<=20520;i++){out.write(i);}CharArrayReaderin=newCharArrayReader(out.toCharArray());try{while((n=in.read())!=-1){if(n%2==0){System.out.printf("\n");}System.out.printf("\t位置%d,字符\'%c\'",n,(char)n);}}catch(IOExceptione){}}}9.7字符串流StringReader使用字符串作為流的源。構(gòu)造方法:publicStringReader(Strings)方法:publicintread()publicintread(char[]buf,intoff,intlen)字符串輸出流StringWriter將內(nèi)存作為目的地。構(gòu)造方法:publicStringWriter()publicStringWriter(int

initialSize)向緩沖區(qū)寫(xiě)入字符方法:publicvoidwrite(intb)publicvoidwrite(char[]b,intoff,intlen)publicvoidwrite(Stringstr)publicvoidwrite(Stringstr,intoff,intlen)publicStringtoString()返回輸出流寫(xiě)入到緩沖區(qū)的全部字符;publicvoidflush()刷新緩沖區(qū)。9.8數(shù)據(jù)流1.DataInputStream類和DataOutputStream類數(shù)據(jù)輸入流和數(shù)據(jù)輸出流允許程序以與機(jī)器無(wú)關(guān)方式從底層輸入流中讀取基本Java數(shù)據(jù)類型。2.DataInputStream類和DataOutputStream的構(gòu)造方法(1)DataInputStream(InputStreamin)將創(chuàng)建的數(shù)據(jù)輸入流指向一個(gè)由參數(shù)in指定的輸入流,以便從后者讀取數(shù)據(jù)。(2)DataOutputStream(OutnputStreamout)將創(chuàng)建的數(shù)據(jù)輸出流指向一個(gè)由參數(shù)out指定的輸出流,然后通過(guò)這個(gè)數(shù)據(jù)輸出流把Java數(shù)據(jù)類型的數(shù)據(jù)寫(xiě)到輸出流out。

DataInputStream類和DataOutputStream類的常用方法。P184

importjava.io.*;publicclassExample9_8{publicstaticvoidmain(Stringargs[]){try{FileOutputStreamfos=newFileOutputStream("jerry.dat");DataOutpu

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論