版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
復(fù)習(xí)編寫線程程序的主要方法?編寫線程程序的主要步驟?講解編寫線程程序的主要方法?繼承Thread類實(shí)現(xiàn)Runnable接口編寫線程程序的主要步驟?繼承Thread類或?qū)崿F(xiàn)Runnable接口重寫run方法定義線程對象啟動線程分析程序的執(zhí)行過程(五個狀態(tài))?程序執(zhí)行機(jī)制解析?run()方法的出處?run()方法的調(diào)用過程?第九章輸入、輸出流
本章導(dǎo)讀1.文件2.文件字節(jié)流3.文件字符流4.從鍵盤讀取數(shù)據(jù)5.緩沖流6.?dāng)?shù)組流7.字符串流8.?dāng)?shù)據(jù)流9.管道流10.對象流11.序列化與對象克隆12.隨機(jī)讀寫流13.文件鎖
java語言提供了豐富的流類(輸入輸出類:java.io包中),用于完成基本的輸入輸出到文件操作(文件及文件夾的管理)。一、基本概念
流的概念:是指計(jì)算機(jī)各部件的數(shù)據(jù)流動。在java語言中,將不同類型的輸入輸出源(鍵盤、屏幕、文件、打印機(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ù)的讀寫都必須等待它前面的數(shù)據(jù)讀寫完畢之后才能讀寫。輸入源輸出源程序讀取輸入流輸出流寫入輸入輸出流按內(nèi)容可分為:字符流、字節(jié)流
字節(jié)流:將數(shù)據(jù)以二進(jìn)制的原始方式讀寫,不能分解、重組和理解這些數(shù)據(jù),每次讀寫8位二進(jìn)制,因此稱為二進(jìn)制字節(jié)流或位流。字節(jié)流可以變換恢復(fù)到原來有意義的狀態(tài)。(處理字節(jié)數(shù)據(jù),二進(jìn)制文件,基本處理類為InputStream、OutputStream類)
字符流:一次讀寫16位二進(jìn)制,并將其作為一個字符處理。(處理字符數(shù)據(jù),文本文件,基本處理類為Reader、Write)
緩沖流:若對數(shù)據(jù)流的每次操作以字節(jié)為單位進(jìn)行,每次讀出一個字節(jié),每次寫入一個字節(jié),需要反復(fù)操作文件或設(shè)備。通常使用緩沖區(qū)(緩沖流)處理,當(dāng)寫入數(shù)據(jù)時,先寫入到緩沖區(qū),等緩沖區(qū)慢后在寫入外部設(shè)備;讀出數(shù)據(jù)時每次,先讀盡可能多的數(shù)據(jù)到緩沖區(qū)中,然后再從緩沖區(qū)讀出數(shù)據(jù)。用于避免反復(fù)讀寫外部設(shè)備、提高輸入輸出效率。二、輸入輸出流類庫(importjava.io.*)
InputStream、OutputStream、Reader、Writer是抽象類,一般不直接使用這些類,而直接使用子類對應(yīng)某種設(shè)備;前兩個字節(jié)輸入輸出類常用于讀寫圖片、聲音等二進(jìn)制文件,后兩個字符輸入輸出文件用于文本文件。
File用于對磁盤文件與文件夾的管理。
RandomAccessFile用于磁盤文件的隨機(jī)讀寫。
9.1文件操作類一、File類概述對磁盤文件與文件夾的管理,建立磁盤文件建立File類對象,為磁盤指定文件名和程序中文件輸入輸出流操作做連接準(zhǔn)備
二、文件的屬性、目錄、創(chuàng)建及刪除、執(zhí)行例9-1importjava.io.*;classFileAcceptimplementsFilenameFilter{Stringstr=null;FileAccept(Strings){str="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(str);}}//設(shè)置文件過濾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,長度:%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());}}列出指定文件夾下的文件,并刪除第一個文件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+"級子文件夾:"+files[i].getAbsolutePath());
}else{System.out.println(kg+"第"+num+"級子文件:"+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é)文件讀寫操作)按自己讀取文件中的數(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("下面開始復(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("文件沒找到!");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ù)制開始**************");byte[]b=newbyte[fis.available()];fis.read(b);fos.write(b);System.out.println("文件復(fù)制完成**************");fis.close();fos.close();
}catch(FileNotFoundExceptione){System.out.println("文件沒找到!");e.printStackTrace();
}catch(IOExceptione){e.printStackTrace();
}
}}用字節(jié)流實(shí)現(xiàn)文件的復(fù)制9.3字符文件流操作(字符文件讀寫操作)按字符讀寫文件,一個漢字當(dāng)一個字符,基本處理類為Reader、Write,例9-4publicclassExample9_4{publicstaticvoidmain(Stringargs[]){Filefile=newFile("hello.txt");charb[]="歡迎welcome".toCharArray();try{FileWriterout=newFileWriter(file);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);}}}9.4緩沖流
若對數(shù)據(jù)流的每次操作以字節(jié)為單位進(jìn)行,每次讀出一個字節(jié),每次寫入一個字節(jié),需要反復(fù)操作文件或設(shè)備。通常使用緩沖區(qū)(緩沖流)處理,當(dāng)寫入數(shù)據(jù)時,先寫入到緩沖區(qū),等緩沖區(qū)慢后在寫入外部設(shè)備;讀出數(shù)據(jù)時每次,先讀盡可能多的數(shù)據(jù)到緩沖區(qū)中,然后再從緩沖區(qū)讀出數(shù)據(jù)。用于避免反復(fù)讀寫外部設(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)制寫出所有數(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對象流將對象進(jìn)行輸入輸出保證對象必須是序列化的,并且對象成員也必須是支持序列化的ObjectInputStream類
writeObject()方法ObjectOutputStream類
readObject()方法序列化:把一個對象完全轉(zhuǎn)成字節(jié)序列,方便傳輸。
就像你寄一箱餅干,因?yàn)轶w積太大,就全壓成粉末緊緊地一包包寄出去,這就是序列化的作用。只不過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)建文件輸出流對象
ObjectOutputStreamoos=newObjectOutputStream(fos);//創(chuàng)建對象輸出流對象
oos.writeObject(tv1);
FileInputStreamfis=newFileInputStream(file);//創(chuàng)建文件輸入流對象
ObjectInputStreamois=newObjectInputStream(fis);//創(chuàng)建對象輸入流對象
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é)號:"+xh+",姓名:"+xm+",成績:"+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)建文件輸出流對象ObjectOutputStreamoos=newObjectOutputStream(fos);//創(chuàng)建對象輸出流對象FileInputStreamfis=newFileInputStream(file);//創(chuàng)建文件輸入流對象ObjectInputStreamois=newObjectInputStream(fis);//創(chuàng)建對象輸入流對象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容器類讀寫publicclassExample9_10j2{publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{Filefile=newFile("d:\\text.txt");if(!file.exists()){file.createNewFile();}FileOutputStreamfos=newFileOutputStream(file);//創(chuàng)建文件輸出流對象ObjectOutputStreamoos=newObjectOutputStream(fos);//創(chuàng)建對象輸出流對象FileInputStreamfis=newFileInputStream(file);//創(chuàng)建文件輸入流對象ObjectInputStreamois=newObjectInputStream(fis);//創(chuàng)建對象輸入流對象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:對象數(shù)組讀寫結(jié)束數(shù)據(jù)流流:源于UNIX操作系統(tǒng)對數(shù)據(jù)的理解有結(jié)構(gòu)的數(shù)據(jù)流式數(shù)據(jù)反映到文件對應(yīng)有相應(yīng)的流式操作例如重定向、管道數(shù)據(jù)流數(shù)據(jù)流是指所有的數(shù)據(jù)通信通道,或是程序和外界進(jìn)行數(shù)據(jù)交換的通道。輸入源輸出源程序讀取輸入流輸出流寫入輸入流:用于輸入數(shù)據(jù)到程序的流。輸出流:用于從程序輸出數(shù)據(jù)的流;輸入輸出是針對程序而言JavaAPI中通過類庫java.io和java.nio(JDK1.4)來實(shí)現(xiàn)I/O處理。字節(jié)流stream從InputStream和OutputStream派生出來的一系列類。這類流以字節(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()判斷文件是否可被寫入Publicbooleanexits()判斷文件是否存在。Publiclonglength()獲取文件的長度(字節(jié))。PublicStringgetAbsolutePath()獲取文件的絕對路徑。PublicStringgetParent()獲取文件的父目錄。PublicbooleanisFile()判斷文件是否是一個文件而不是目錄。PublicbooleanisDirectroy()判斷文件是否是一個目錄。PublicbooleanisHidden()判斷文件是否是隱藏文件。PubliclonglastModified()獲取文件最后修改的時間目錄創(chuàng)建目錄publicbooleanmkdir():創(chuàng)建一個目錄,如果創(chuàng)建成功返回true。列出目錄中的文件publicString[]list()用字符串形式返回目錄下的全部文件。publicFile[]listFiles()用File對象形式返回目錄下的全部文件。publicString[]list(FilenameFilterobj)該方法用字符串形式返回目錄下的指定類型的所有文件。publicFile[]listFiles(FilenameFilterobj)該方法用File對象返回目錄下的指定類型所有文件。當(dāng)需要列出目錄下指定類型文件如.java、.txt等時FilenameFilter是個接口publicinterfaceFilenameFilter{booleanaccept(File
dir,String
name)}list方法執(zhí)行時不斷回調(diào)接口方法,當(dāng)返回true時將文件放入數(shù)組,故使用時需實(shí)現(xiàn)accept方法。參數(shù)name為目錄中的文件名參數(shù)dir為調(diào)用list的當(dāng)前對象3.文件的創(chuàng)建與刪除當(dāng)使用File類創(chuàng)建一個文件對象后文件對象調(diào)用方法:
publicbooleancreateNewFile()建立文件。文件對象調(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)存在不需要創(chuàng)建");}else{System.out.println("目錄不存在需要創(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("開始創(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,長度:%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());}}不可寫成D:\ch8,可以寫D:\\ch8
4.運(yùn)行可執(zhí)行文件(Runtime類)創(chuàng)建Runtime類對象Runtimeec=Runtime.getRuntime();ec調(diào)用exec(Stringcommand)方法打開本地機(jī)的可執(zhí)行文件或執(zhí)行一個操作。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方法從輸入流中順序讀取單個字節(jié)的數(shù)據(jù)。該方法返回字節(jié)值,讀取位置到達(dá)文件末尾則返回-1publicvoidclose()throwsIOException關(guān)閉此文件輸入流并釋放與此流有關(guān)的所有系統(tǒng)資源
publicintavailable()輸入流中剩余字節(jié)數(shù)
publiclongskip(long
n)從輸入流中跳過并丟棄n個字節(jié)的數(shù)據(jù)publicintread(byte[]
b)publicintread(byte[]
b,int
off,int
len)返回讀取字節(jié)數(shù)2.FileOutputStream類構(gòu)造方法:FileOutputStream(Stringname)FileOutputStream(Filefile)輸出流通過使用write()方法把數(shù)據(jù)寫入輸出流到達(dá)目的地。寫入時若文件存在則刷新,不存在創(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é)果另存為一個文件。3改進(jìn):參照UltraEdit樣式顯示源程序9.3文件字符流FileReader類(
Reader子類)構(gòu)造方法:FileReader(
Stringname)FileReader(Filefile)可能拋出FileNotFoundExceptionintread()
從源中讀取一個字符,該方法返回一個整數(shù)(Unicode字符值),如果未讀出字符就返回-1。
intread(charb[])
從源中讀取b.length個字符到字符數(shù)組b中,返回實(shí)際讀取的字符數(shù)目。如果到達(dá)文件的末尾,則返回-1。intread(charb[],intoff,intlen)
從源中讀取len個字符并存放到字符數(shù)組b中,返回實(shí)際讀取的字符數(shù)目。如果到達(dá)文件的末尾,則返回-1。
2.FileWriter類構(gòu)造方法:FileWriter(Stringname)FileWriter(Filefile)輸出流通過使用write()方法把字符數(shù)據(jù)寫入輸出流到達(dá)目的地??赡軖伋鯢ileNotFoundExceptionwrite的用法:publicvoidwrite(charb[])程序?qū)慴.length個字符到輸出流。publicvoid.write(charb[],intoff,intlen)程序從給定字符數(shù)組中起始于偏移量off處寫len個字符到輸出流,參數(shù)b是存放了數(shù)據(jù)的字符數(shù)組。voidwrite(Stringstr)程序把字符串中的全部字符寫入到輸出流。voidwrite(Stringstr,intoff,intlen)程序從字符串str中起始于偏移量off處寫len個字符到輸出流。importjava.io.*;publicclassExample9_4{publicstaticvoidmain(Stringargs[]){Filefile=newFile("hello.txt");charb[]="歡迎welcome".toCharArray();try{FileWriterout=newFileWriter(file);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.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類有兩個重要的類成員:in和out,分別是輸入流和輸出流類型的對象。in的源是鍵盤,in可以讀取用戶從鍵盤鍵入的數(shù)據(jù)。
Scanner類可以使用in初始化一個對象:Scannerreader=newScanner(System.in);
reader對象調(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)通過向BufferedReader傳遞一個Reader對象來創(chuàng)建一個BufferedReader對象。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的一部分寫入到目的地。voidflush()刷新該流的緩沖
voidnewLine()寫入一個行分隔符。
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ì)一個二進(jìn)制文件復(fù)制的例子分析二進(jìn)制文件與文本文件的異同復(fù)制的實(shí)現(xiàn)過程測試性能改進(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é)流讀寫操作不會發(fā)生IOException異常ByteArrayOutputStream流的構(gòu)造方法:
ByteArrayOutputStream()ByteArrayOutputStream(intsize)數(shù)組字節(jié)輸出流調(diào)用publicbyte[]toByteArray()方法,可以返回輸出流寫入到緩沖區(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,對應(yīng)字符\'%c\'",n,(char)n);}}}與數(shù)組字節(jié)流對應(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ū)寫入字符方法:publicvoidwrite(intb)publicvoidwrite(char[]b,intoff,intlen)publicvoidwrite(Stringstr)publicvoidwrite(Stringstr,intoff,intlen)publicStringtoString()返回輸出流寫入到緩沖區(qū)的全部字符;publicvoidflush()刷新緩沖區(qū)。9.8數(shù)據(jù)流1.DataInputStream類和DataOutputStream類數(shù)據(jù)輸入流和數(shù)據(jù)輸出流允許程序以與機(jī)器無關(guān)方式從底層輸入流中讀取基本Java數(shù)據(jù)類型。2.DataInputStream類和DataOutputStream的構(gòu)造方法(1)DataInputStream(InputStreamin)將創(chuàng)建的數(shù)據(jù)輸入流指向一個由參數(shù)in指定的輸入流,以便從后者讀取數(shù)據(jù)。(2)DataOutputStream(OutnputStreamout)將創(chuàng)建的數(shù)據(jù)輸出流指向一個由參數(shù)out指定的輸出流,然后通過這個數(shù)據(jù)輸出流把Java數(shù)據(jù)類型的數(shù)據(jù)寫到輸出流out。
DataInputStream類和DataOutputStream類的常用方法。P184
importjava.io.*;publicclassExample9_8{publicstaticvoidmain(Stringargs[]){try{FileOutputStreamfos=newFileOutputStream("jerry.dat");DataOutpu
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投資借款協(xié)議書
- 醫(yī)療廢物處理授權(quán)委托書
- 環(huán)保技術(shù)招投標(biāo)管理
- 船舶配件物流公司聘用合同
- 個性辦公家具招標(biāo)方案
- 健身器材專利申請策略
- 物聯(lián)網(wǎng)設(shè)備雙電源運(yùn)行要求
- 城市住宅建設(shè)施工合同范本
- 機(jī)場安檢監(jiān)控議標(biāo)承諾書
- 醫(yī)療機(jī)構(gòu)建設(shè)農(nóng)民工薪酬承諾書
- 污水處理廠安全生產(chǎn)培訓(xùn)資料課件
- 攝影測量專業(yè)職業(yè)生涯規(guī)劃書
- 老年健康與醫(yī)養(yǎng)結(jié)合服務(wù)管理
- 全國優(yōu)質(zhì)課一等獎人教版八年級生物上冊《真菌》公開課課件(內(nèi)嵌視頻)
- 部編版一到六年級(12冊)日積月累匯總
- 中國新聞事業(yè)發(fā)展史-第十講 新聞事業(yè)的發(fā)展成熟與全面勝利
- 術(shù)前傳染病篩查結(jié)果的解讀
- 《跨境電商數(shù)據(jù)分析與應(yīng)用》 課程標(biāo)準(zhǔn)
- 律師事務(wù)所合伙人退伙登記表
- 粵北十縣市白話的語音特點(diǎn)
- 小學(xué)數(shù)學(xué)-連加連減教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
評論
0/150
提交評論