




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
復習編寫線程程序的主要方法?編寫線程程序的主要步驟?講解編寫線程程序的主要方法?繼承Thread類實現Runnable接口編寫線程程序的主要步驟?繼承Thread類或實現Runnable接口重寫run方法定義線程對象啟動線程分析程序的執行過程(五個狀態)?程序執行機制解析?run()方法的出處?run()方法的調用過程?第九章輸入、輸出流
本章導讀1.文件2.文件字節流3.文件字符流4.從鍵盤讀取數據5.緩沖流6.數組流7.字符串流8.數據流9.管道流10.對象流11.序列化與對象克隆12.隨機讀寫流13.文件鎖
java語言提供了豐富的流類(輸入輸出類:java.io包中),用于完成基本的輸入輸出到文件操作(文件及文件夾的管理)。一、基本概念
流的概念:是指計算機各部件的數據流動。在java語言中,將不同類型的輸入輸出源(鍵盤、屏幕、文件、打印機等)抽象為流或數據流。按傳輸方向可分為:輸入流、輸出流
采用數據流處理輸入輸出的好處是,使輸入輸出操作獨立于相關設備,隱藏了具體的實現細節,用戶只需在程序中操作統一規范的類及相關方法即可。
流式輸入輸出的特點是數據的的獲取和發送沿著數據序列的順序進行,每次數據的讀寫都必須等待它前面的數據讀寫完畢之后才能讀寫。輸入源輸出源程序讀取輸入流輸出流寫入輸入輸出流按內容可分為:字符流、字節流
字節流:將數據以二進制的原始方式讀寫,不能分解、重組和理解這些數據,每次讀寫8位二進制,因此稱為二進制字節流或位流。字節流可以變換恢復到原來有意義的狀態。(處理字節數據,二進制文件,基本處理類為InputStream、OutputStream類)
字符流:一次讀寫16位二進制,并將其作為一個字符處理。(處理字符數據,文本文件,基本處理類為Reader、Write)
緩沖流:若對數據流的每次操作以字節為單位進行,每次讀出一個字節,每次寫入一個字節,需要反復操作文件或設備。通常使用緩沖區(緩沖流)處理,當寫入數據時,先寫入到緩沖區,等緩沖區慢后在寫入外部設備;讀出數據時每次,先讀盡可能多的數據到緩沖區中,然后再從緩沖區讀出數據。用于避免反復讀寫外部設備、提高輸入輸出效率。二、輸入輸出流類庫(importjava.io.*)
InputStream、OutputStream、Reader、Writer是抽象類,一般不直接使用這些類,而直接使用子類對應某種設備;前兩個字節輸入輸出類常用于讀寫圖片、聲音等二進制文件,后兩個字符輸入輸出文件用于文本文件。
File用于對磁盤文件與文件夾的管理。
RandomAccessFile用于磁盤文件的隨機讀寫。
9.1文件操作類一、File類概述對磁盤文件與文件夾的管理,建立磁盤文件建立File類對象,為磁盤指定文件名和程序中文件輸入輸出流操作做連接準備
二、文件的屬性、目錄、創建及刪除、執行例9-1importjava.io.*;classFileAcceptimplementsFilenameFilter{Stringstr=null;FileAccept(Strings){str="."+s;}publicbooleanaccept(Filedir,Stringname){returnname.endsWith(str);}}//設置文件過濾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();//獲取當前JVM的運行環境ce.exec("javacExample9_1.java");Filefile=newFile("C:\\windows","Notepad.exe");ce.exec(file.getAbsolutePath());}catch(Exceptione){}}}9.2字節文件流操作(字節文件讀寫操作)按自己讀取文件中的數據,基本處理類為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("目標文件路徑:"+f2.getAbsolutePath());System.out.println("下面開始復制文件**************");fis=newFileInputStream(f1);//文件字節輸入流
fos=newFileOutputStream(f2);//文件字節輸出流
inttmp=fis.read();while(tmp!=-1){fos.write(tmp);tmp=fis.read();}fis.close();fos.close();System.out.println("文件復制完成****************");}catch(FileNotFoundExceptione){System.out.println("文件沒找到!");e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){newExam();}}用字節流實現文件的復制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("目標文件路徑:"+f2.getAbsolutePath());System.out.println("文件的大小:"+fis.available()+"字節");System.out.println("文件復制開始**************");byte[]b=newbyte[fis.available()];fis.read(b);fos.write(b);System.out.println("文件復制完成**************");fis.close();fos.close();
}catch(FileNotFoundExceptione){System.out.println("文件沒找到!");e.printStackTrace();
}catch(IOExceptione){e.printStackTrace();
}
}}用字節流實現文件的復制9.3字符文件流操作(字符文件讀寫操作)按字符讀寫文件,一個漢字當一個字符,基本處理類為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緩沖流
若對數據流的每次操作以字節為單位進行,每次讀出一個字節,每次寫入一個字節,需要反復操作文件或設備。通常使用緩沖區(緩沖流)處理,當寫入數據時,先寫入到緩沖區,等緩沖區慢后在寫入外部設備;讀出數據時每次,先讀盡可能多的數據到緩沖區中,然后再從緩沖區讀出數據。用于避免反復讀寫外部設備、提高輸入輸出效率。
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();//刷新緩沖區,強制寫出所有數據
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對象流將對象進行輸入輸出保證對象必須是序列化的,并且對象成員也必須是支持序列化的ObjectInputStream類
writeObject()方法ObjectOutputStream類
readObject()方法序列化:把一個對象完全轉成字節序列,方便傳輸。
就像你寄一箱餅干,因為體積太大,就全壓成粉末緊緊地一包包寄出去,這就是序列化的作用。只不過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);//創建文件輸出流對象
ObjectOutputStreamoos=newObjectOutputStream(fos);//創建對象輸出流對象
oos.writeObject(tv1);
FileInputStreamfis=newFileInputStream(file);//創建文件輸入流對象
ObjectInputStreamois=newObjectInputStream(fis);//創建對象輸入流對象
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="學號:"+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);//創建文件輸出流對象ObjectOutputStreamoos=newObjectOutputStream(fos);//創建對象輸出流對象FileInputStreamfis=newFileInputStream(file);//創建文件輸入流對象ObjectInputStreamois=newObjectInputStream(fis);//創建對象輸入流對象ArrayList<Student>list=newArrayList<Student>();list.add(newStudent(1,"王平",95));//向容器類添加數據
list.add(newStudent(2,"李娜",89));list.add(newStudent(3,"張華",85));list.add(newStudent(4,"劉麗",88));list.add(newStudent(5,"劉曾",95));//向容器類添加數據
oos.writeObject(list);ArrayList<Student>listd=newArrayList<Student>();
listd=(ArrayList<Student>)ois.readObject();System.out.println("全部數據:");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);//創建文件輸出流對象ObjectOutputStreamoos=newObjectOutputStream(fos);//創建對象輸出流對象FileInputStreamfis=newFileInputStream(file);//創建文件輸入流對象ObjectInputStreamois=newObjectInputStream(fis);//創建對象輸入流對象Students[]={newStudent(1,"王平",95),//向容器類添加數據
newStudent(2,"李娜",89),newStudent(3,"張華",85),newStudent(4,"劉麗",88)};//向容器類添加數據}oos.writeObject(s);Studento[]=(Student[])ois.readObject();System.out.println("全部數據:");for(inti=0;i<o.length;i++){System.out.println(o[i].toString());}}}例10-加2:對象數組讀寫結束數據流流:源于UNIX操作系統對數據的理解有結構的數據流式數據反映到文件對應有相應的流式操作例如重定向、管道數據流數據流是指所有的數據通信通道,或是程序和外界進行數據交換的通道。輸入源輸出源程序讀取輸入流輸出流寫入輸入流:用于輸入數據到程序的流。輸出流:用于從程序輸出數據的流;輸入輸出是針對程序而言JavaAPI中通過類庫java.io和java.nio(JDK1.4)來實現I/O處理。字節流stream從InputStream和OutputStream派生出來的一系列類。這類流以字節(byte)為基本處理單位。字符流reader&writer從Reader和Writer派生出的一系列類,這類流以16位的Unicode碼表示的字符為基本處理單位。InputStream 抽象的字節輸入流類OuputStream 抽象的字節輸出流類Reader 抽象的字符輸入流類Writer 抽象的字符輸出流9.1文件(java.io包)File的構造方法:File(Stringfilename);File(StringdirectoryPath,Stringfilename);File(Filef,Stringfilename);文件常用方法PublicStringgetName()獲取文件的名字。PublicbooleancanRead()判斷文件是否是可讀PublicbooleancanWrite()判斷文件是否可被寫入Publicbooleanexits()判斷文件是否存在。Publiclonglength()獲取文件的長度(字節)。PublicStringgetAbsolutePath()獲取文件的絕對路徑。PublicStringgetParent()獲取文件的父目錄。PublicbooleanisFile()判斷文件是否是一個文件而不是目錄。PublicbooleanisDirectroy()判斷文件是否是一個目錄。PublicbooleanisHidden()判斷文件是否是隱藏文件。PubliclonglastModified()獲取文件最后修改的時間目錄創建目錄publicbooleanmkdir():創建一個目錄,如果創建成功返回true。列出目錄中的文件publicString[]list()用字符串形式返回目錄下的全部文件。publicFile[]listFiles()用File對象形式返回目錄下的全部文件。publicString[]list(FilenameFilterobj)該方法用字符串形式返回目錄下的指定類型的所有文件。publicFile[]listFiles(FilenameFilterobj)該方法用File對象返回目錄下的指定類型所有文件。當需要列出目錄下指定類型文件如.java、.txt等時FilenameFilter是個接口publicinterfaceFilenameFilter{booleanaccept(File
dir,String
name)}list方法執行時不斷回調接口方法,當返回true時將文件放入數組,故使用時需實現accept方法。參數name為目錄中的文件名參數dir為調用list的當前對象3.文件的創建與刪除當使用File類創建一個文件對象后文件對象調用方法:
publicbooleancreateNewFile()建立文件。文件對象調用方法:
publicbooleandelete()刪除當前文件。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("目錄已經存在不需要創建");}else{System.out.println("目錄不存在需要創建");dirExits=dirFile.mkdir();
if(dirExits==true){System.out.println("創建成功");}else{System.out.println("不能創建目錄");System.exit(0);}}System.out.println("開始創建文件");crateFile=newFile("E:\\test\\letter.txt");dirExits=crateFile.createNewFile();}catch(IOExceptione){}if(dirExits==true)System.out.println("文件創建成功");}}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.運行可執行文件(Runtime類)創建Runtime類對象Runtimeec=Runtime.getRuntime();ec調用exec(Stringcommand)方法打開本地機的可執行文件或執行一個操作。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文件字節流FileInputStream類(InputStream子類)
構造方法: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方法從輸入流中順序讀取單個字節的數據。該方法返回字節值,讀取位置到達文件末尾則返回-1publicvoidclose()throwsIOException關閉此文件輸入流并釋放與此流有關的所有系統資源
publicintavailable()輸入流中剩余字節數
publiclongskip(long
n)從輸入流中跳過并丟棄n個字節的數據publicintread(byte[]
b)publicintread(byte[]
b,int
off,int
len)返回讀取字節數2.FileOutputStream類構造方法:FileOutputStream(Stringname)FileOutputStream(Filefile)輸出流通過使用write()方法把數據寫入輸出流到達目的地。寫入時若文件存在則刷新,不存在創建。其它方法參考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);}作業顯示Java源程序實現Java源程序的復制選作:按照16進制顯示Java源程序,把顯示結果另存為一個文件。3改進:參照UltraEdit樣式顯示源程序9.3文件字符流FileReader類(
Reader子類)構造方法:FileReader(
Stringname)FileReader(Filefile)可能拋出FileNotFoundExceptionintread()
從源中讀取一個字符,該方法返回一個整數(Unicode字符值),如果未讀出字符就返回-1。
intread(charb[])
從源中讀取b.length個字符到字符數組b中,返回實際讀取的字符數目。如果到達文件的末尾,則返回-1。intread(charb[],intoff,intlen)
從源中讀取len個字符并存放到字符數組b中,返回實際讀取的字符數目。如果到達文件的末尾,則返回-1。
2.FileWriter類構造方法:FileWriter(Stringname)FileWriter(Filefile)輸出流通過使用write()方法把字符數據寫入輸出流到達目的地。可能拋出FileNotFoundExceptionwrite的用法:publicvoidwrite(charb[])程序寫b.length個字符到輸出流。publicvoid.write(charb[],intoff,intlen)程序從給定字符數組中起始于偏移量off處寫len個字符到輸出流,參數b是存放了數據的字符數組。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);}作業顯示Java源程序實現Java源程序的復制要求:使用Reader、Writer實現作業顯示Java源程序實現Java源程序的復制要求:使用Reader、Writer實現9.4從鍵盤讀取數據java.lang包中的System類有兩個重要的類成員:in和out,分別是輸入流和輸出流類型的對象。in的源是鍵盤,in可以讀取用戶從鍵盤鍵入的數據。
Scanner類可以使用in初始化一個對象:Scannerreader=newScanner(System.in);
reader對象調用方法,讀取用戶在命令行輸入的各種數據類型。out流的目的地是命令行窗口,out調用方法可以將數據送到命令行窗口。練習題目:從鍵盤讀入x、y的值,顯示x+y的結果分析輸入:x、y計算:x+y輸出:結果9.5緩沖流BufferedReader類構造方法:BufferedReader(Readerin)通過向BufferedReader傳遞一個Reader對象來創建一個BufferedReader對象。BufferedReader流除了有read()方法外,還能夠讀取文本行,使用方法readLine()。FileReaderinOne=newFileReader(“Student.txt”);BufferedReaderinTwo=newBufferedReader(inOne);2.BufferedWriter類構造方法: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);}}}練習題目:設計一個二進制文件復制的例子分析二進制文件與文本文件的異同復制的實現過程測試性能改進每次實現一塊的復制9.6數組流字節輸入流:ByteArrayInputStream字節輸出流:ByteArrayOutputStream分別使用字節數組作為流的源和目標。ByteArrayInputStream流構造方法:ByteArrayInputStream(byte[]buf)ByteArrayInputStream(byte[]buf,intoffset,intlength)
數組字節流讀寫操作不會發生IOException異常ByteArrayOutputStream流的構造方法:
ByteArrayOutputStream()ByteArrayOutputStream(intsize)數組字節輸出流調用publicbyte[]toByteArray()方法,可以返回輸出流寫入到緩沖區的全部字節。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字節%d,對應字符\'%c\'",n,(char)n);}}}與數組字節流對應的是數組字符流:CharArrayReader與CharArrayWriter類。數組字符流分別使用字符數組作為流的源和目標。與數組字節流不同的是,數組字符流的讀操作可能發生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使用字符串作為流的源。構造方法:publicStringReader(Strings)方法:publicintread()publicintread(char[]buf,intoff,intlen)字符串輸出流StringWriter將內存作為目的地。構造方法:publicStringWriter()publicStringWriter(int
initialSize)向緩沖區寫入字符方法:publicvoidwrite(intb)publicvoidwrite(char[]b,intoff,intlen)publicvoidwrite(Stringstr)publicvoidwrite(Stringstr,intoff,intlen)publicStringtoString()返回輸出流寫入到緩沖區的全部字符;publicvoidflush()刷新緩沖區。9.8數據流1.DataInputStream類和DataOutputStream類數據輸入流和數據輸出流允許程序以與機器無關方式從底層輸入流中讀取基本Java數據類型。2.DataInputStream類和DataOutputStream的構造方法(1)DataInputStream(InputStreamin)將創建的數據輸入流指向一個由參數in指定的輸入流,以便從后者讀取數據。(2)DataOutputStream(OutnputStreamout)將創建的數據輸出流指向一個由參數out指定的輸出流,然后通過這個數據輸出流把Java數據類型的數據寫到輸出流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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 避難場所協議書
- 股權分離協議書
- 英美法德協議書
- 留服存檔協議書
- 索賠轉讓協議書
- 外賣配送員合同協議書
- 能源租車協議書
- 工程購買混凝土協議書
- 托育園會員合同協議書
- 茶室會員協議書
- 病假醫療期申請單(新修訂)
- 鉆孔樁鉆孔記錄表(旋挖鉆)
- 660MW機組金屬監督項目
- JBK-698CX淬火機數控系統
- ZJUTTOP100理工類學術期刊目錄(2018年版)
- 心理學在船舶安全管理中的應用
- JJF(鄂) 90-2021 電子輥道秤校準規范(高清版)
- 超星爾雅學習通《今天的日本》章節測試含答案
- 餐飲量化分級
- 三一重工SCC2000履帶吊履帶式起重機技術參數
- [精品]GA38-2004《銀行營業場所風險等級和防護級別的規定》
評論
0/150
提交評論