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

下載本文檔

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

文檔簡(jiǎn)介

第八章Java的輸入輸出流教學(xué)提示大多數(shù)的程序都離不開(kāi)輸入和輸出,比如從鍵盤(pán)讀取數(shù)據(jù),從文件中獲取數(shù)據(jù)或者將數(shù)據(jù)存入文件,在顯示器上顯示數(shù)據(jù),以及在網(wǎng)絡(luò)上進(jìn)行信息交互等,都會(huì)涉及到有關(guān)輸入/輸出的處理。本章內(nèi)容8.1輸入/輸出流8.2文件處理8.3隨機(jī)存取文件和本地可執(zhí)行文件8.4數(shù)據(jù)流與對(duì)象流8.5JAVA的多媒體技術(shù)知識(shí)要求了解流的概念;理解基本的I/O對(duì)象;掌握通過(guò)流處理字節(jié)級(jí)數(shù)據(jù)、字符數(shù)據(jù)、對(duì)象數(shù)據(jù)的存取方法和隨機(jī)流的訪(fǎng)問(wèn)方法;掌握本地可執(zhí)行文件的調(diào)用方法。本章重/難點(diǎn)重點(diǎn):使用文件流對(duì)文件的操作。難點(diǎn):對(duì)象序列化。8.1輸入/輸出流1、流的概念2、io類(lèi)庫(kù)流的概念概念:可以被認(rèn)為是數(shù)據(jù)從一種設(shè)備流向另一種設(shè)備的過(guò)程,就是一個(gè)通道。特點(diǎn):數(shù)據(jù)的發(fā)送和獲取都是沿?cái)?shù)據(jù)序列順序進(jìn)行的,每個(gè)數(shù)據(jù)必須等待它前面的數(shù)據(jù)發(fā)送或讀入后才能被讀寫(xiě)。流的分類(lèi)按流的運(yùn)行方向分:輸入流輸出流輸入輸出流的概念輸入流:將數(shù)據(jù)引入到計(jì)算機(jī)的CPU中如:從磁盤(pán)中讀取信息、從網(wǎng)絡(luò)中讀信息、從掃描儀中讀信息輸出流:將數(shù)據(jù)引導(dǎo)到外部設(shè)備如:向磁盤(pán)中保存文件、向網(wǎng)絡(luò)中發(fā)送文件、在屏幕上顯示文件等當(dāng)需要讀入數(shù)據(jù)時(shí),程序先從數(shù)據(jù)的來(lái)源(文件、網(wǎng)絡(luò)等)打開(kāi)一個(gè)流,然后從這個(gè)流中順序讀取數(shù)據(jù)當(dāng)要輸出數(shù)據(jù)時(shí),程序打開(kāi)一個(gè)流,通過(guò)這個(gè)流向輸出目標(biāo)順序?qū)懭霐?shù)據(jù)流中的數(shù)據(jù)可以是二進(jìn)制數(shù)據(jù),或是某種格式的特定數(shù)據(jù)Java中數(shù)據(jù)流的兩種類(lèi)型字節(jié)流(按8位一個(gè)字節(jié)來(lái)處理二進(jìn)制數(shù)據(jù))Java.io包中InputStream(輸入)和OutputStream(輸出)類(lèi)來(lái)實(shí)現(xiàn)傳輸字符流(按16位一個(gè)字符的Unicode碼來(lái)處理數(shù)據(jù)文本型)Java.io包中Reader和Writer類(lèi)來(lái)實(shí)現(xiàn)傳輸io類(lèi)庫(kù)Java中數(shù)據(jù)輸入輸出的所有功能實(shí)現(xiàn)都是通過(guò)java.io包中的類(lèi)和接口來(lái)完成的。

java.io包中的一些處理數(shù)據(jù)流和文件的類(lèi)

字節(jié)(Byte)流傳輸8位的數(shù)據(jù)就應(yīng)用Byte流,這些類(lèi)主要用來(lái)傳輸二進(jìn)制數(shù)據(jù),如聲音和圖像。InputStream和OutputStream是處理字節(jié)數(shù)據(jù)的基本類(lèi),這兩個(gè)類(lèi)是抽象類(lèi),不能直接使用。字節(jié)輸入流的層次結(jié)構(gòu)文件流,對(duì)文件進(jìn)行讀寫(xiě)操作管道流,實(shí)現(xiàn)程序或線(xiàn)程間的通信過(guò)濾流字節(jié)數(shù)組流,實(shí)現(xiàn)與內(nèi)存緩沖區(qū)的同步讀寫(xiě)和CPU寄存器的讀寫(xiě)數(shù)據(jù)流,實(shí)現(xiàn)帶格式的讀寫(xiě)操作將數(shù)據(jù)讀寫(xiě)到緩沖區(qū)對(duì)象流,將對(duì)象作為一個(gè)數(shù)據(jù)通過(guò)流進(jìn)行傳輸和存儲(chǔ)字節(jié)輸出流的層次結(jié)構(gòu)字符輸入流的層次結(jié)構(gòu)Character流以Reader(對(duì)應(yīng)輸入)和Writer(對(duì)應(yīng)輸出)兩個(gè)類(lèi)族來(lái)實(shí)現(xiàn),其中Reader和Writer是輸入和輸出族的根類(lèi)讀緩沖存儲(chǔ)進(jìn)行字節(jié)碼與字符碼的相互轉(zhuǎn)換用于字符文件的輸入、輸出字符輸出流的層次結(jié)構(gòu)字節(jié)流和字符流的相互轉(zhuǎn)換通過(guò)InputStreamReader類(lèi)和OutputStreamWriter類(lèi)實(shí)現(xiàn)InputStreamReader:讀取字節(jié)并解碼為字符PublicString(byte

bytes[],String

charsetName)OutputStreamWriter:將要寫(xiě)入的字符解碼為字節(jié)Byte[]String.getBytes(String

charsetName)字符流和字節(jié)流的對(duì)應(yīng)關(guān)系

Reader類(lèi)和Writer類(lèi)的子類(lèi)與InputStream類(lèi)和OutputStream類(lèi)的子類(lèi)大部分是對(duì)應(yīng)的,不同之處是前者用來(lái)處理16位的字符流,而后者用來(lái)處理8位的字節(jié)流字節(jié)流和字符流的對(duì)應(yīng)表之前常用的輸入輸出方法PrintStream類(lèi)

println()不屬于OutputStream類(lèi),是PrintStream類(lèi)的子類(lèi),能提供復(fù)雜的輸出。PrintStream類(lèi)為其他輸出流添加了功能,使它們能夠方便地打印各種數(shù)據(jù)值表示形式。

PrintStream類(lèi)的方法有:Write,flush,checkError,print,println,close.其中println可以輸出多種形式的數(shù)據(jù).例如:

System.in和System.out對(duì)象為了支持標(biāo)準(zhǔn)的輸入輸出設(shè)備,Java定義了兩個(gè)流的對(duì)象:System.in和System.out。System.in可以從鍵盤(pán)中讀入數(shù)據(jù),System.out可以將數(shù)據(jù)輸出到顯示屏。例:輸入一個(gè)字符,在屏幕上顯示該字符

importjava.io.*;publicclassCharInput1{publicstaticvoidmain(String[]args)throws

IOException//必須做異常處理{inta; try{System.out.print("請(qǐng)輸入一個(gè)字符:");

a=System.in.read();

System.out.println("你輸入的字符是"+(char)a);}catch(IOExceptione){System.out.println("錯(cuò)誤信息為:"+e.toString()); }}}例:輸入一行字符,在屏幕上顯示該行字符importjava.io.*;publicclassCharInput2{publicstaticvoidmain(String[]args){bytebuffer[]=newbyte[255];System.out.println("請(qǐng)?jiān)谙旅孑斎胍恍凶址?);try{System.in.read(buffer,0,255);//將輸入字符讀入數(shù)組里}catch(Exceptione)//捕獲異常并處理{ System.out.println("讀取輸入字符出錯(cuò),錯(cuò)誤信息為:"+e.toString());}System.out.println("您剛才輸入的一行字符為:");StringinputStr=newString(buffer);System.out.println(inputStr);}}8.2文件處理1、文件與目錄管理2、文件流1、文件與目錄管理與文件操作相關(guān)的類(lèi):File類(lèi)在Java語(yǔ)言中,用類(lèi)File表示文件,F(xiàn)ile類(lèi)可以處理各種文件操作。和文件相關(guān)的一個(gè)重要概念是目錄,Java的類(lèi)File既可以表示文件,也可以表示目錄。File類(lèi)(文件類(lèi))是Object類(lèi)的直接子類(lèi),在java.io包中。不能完成數(shù)據(jù)的輸入輸出功能。File類(lèi)是文件或目錄的抽象,封裝了相應(yīng)的屬性和方法File類(lèi)的構(gòu)造方法Path:帶有絕對(duì)路經(jīng)或相對(duì)路徑的文件名或僅是路徑。如:Filef=newFile(“c:\j2sdk1.4.2\bin\D.java”)Filem=newFile(“\j2sdk1.4.2\bin\D.java”)

Files=newFile(“D.java”)方法二:

publicFile(Stringpath,Stringname)參數(shù)path是路徑,name是文件名或目錄名。即路徑和文件名分開(kāi),便于管理和修改如:Filen=newFile(“c:\j2sdk1.4.2\bin”,”D.java”)方法一:publicFile(Stringpath)File類(lèi)相關(guān)的操作1.獲取相關(guān)的屬性可獲得文件名、路徑、長(zhǎng)度、是目錄還是文件、目錄下的文件、讀寫(xiě)屬性等2.主要的操作重命名、刪除、創(chuàng)建目錄文件處理——

1.獲取文件和目錄屬性列出目錄下的文件如果File對(duì)象是目錄,而不是文件,則可以用下面的方法列出目錄下的文件。publicString[]list()將目錄下的所有文件名保存在字符串?dāng)?shù)組中返回。獲取所有根目錄如果需要知道磁盤(pán)上的所有文件,則要找出系統(tǒng)平臺(tái)的所有根目錄名。publicstaticFile[]listRoots()該方法返回File數(shù)組,其中存放系統(tǒng)平臺(tái)的所有根目錄名。判斷文件或目錄是否存在booleanexists()判斷是文件還是目錄booleanisfile()booleanisDirectory()獲取文件、目錄名和路徑StringgetName()StringgetPath()獲取文件長(zhǎng)度longlength()文件讀寫(xiě)性質(zhì)booleancanRead();booleancanWirte();比較文件或目錄booleanequals(Filef)文件處理——

2.文件及目錄操作創(chuàng)建新目錄

①publicbooleanmkdir()生成File對(duì)象指定的目錄。②publicbooleanmkdirs()生成File對(duì)象指定的目錄樹(shù)。兩個(gè)方法的區(qū)別:mkdirs()可以創(chuàng)建目錄路徑中多層目錄,即同時(shí)創(chuàng)建這個(gè)目錄的父目錄以及父目錄的父目錄,mkdir()要求創(chuàng)建目錄的父目錄已存在。創(chuàng)建新目錄例如,下面的語(yǔ)句就在Windows下創(chuàng)建目錄樹(shù):c:\lianxi\exampleFilef=newFile("c:\lianxi\example");

f.mkdirs();創(chuàng)建新文件下面的語(yǔ)句在當(dāng)前目錄下建立一個(gè)文本文件wo.txt:Filef=newFile("./wo.txt"); f.createNewFile();重命名文件boolean

renameTo(File

newFile);刪除當(dāng)前文件voiddelete();2、文件流對(duì)文件進(jìn)行輸入輸出處理的類(lèi)FileInputStream:字節(jié)文件輸入流FileOutputStream:字節(jié)文件輸出流FileReader:字符文件輸入流FileWriter:字符文件輸出流FileInputStream類(lèi)的構(gòu)造方法

方法一:直接用文件名FileInputStreamfis=newFileInputStream(“e:/temp/b.txt");方法二:用文件對(duì)象名Filef=newFile(“e:/temp/b.txt");FileInputStreamfis=newFileInputStream(f);FileInputStream類(lèi)常用的方法intread():每次讀一個(gè)字節(jié)的數(shù)據(jù),讀完返回-1int

read(byte[]b):每次讀多個(gè)字節(jié),將數(shù)據(jù)讀入到一個(gè)數(shù)組b[]中,返回實(shí)際讀取字節(jié)數(shù)。int

read(byte[]b,int

off,int

len)

將len個(gè)字節(jié)的數(shù)據(jù)讀入到一個(gè)字節(jié)型數(shù)組b[]中,從下標(biāo)off開(kāi)始存放,并返回實(shí)際讀入的字節(jié)數(shù)。intavailable()

返回可讀入的字節(jié)數(shù)。voidclose()

關(guān)閉輸入流,并釋放任何與該流有關(guān)的資源。protectedvoidfinalize()

當(dāng)讀到無(wú)用信息時(shí),關(guān)閉該流。longskip(longn)

跳過(guò)輸入流上的n個(gè)字節(jié)。FileInputStream類(lèi)讀取文件例子功能:從文件里取內(nèi)容顯示到對(duì)話(huà)框中關(guān)鍵點(diǎn):

1.建立流從相應(yīng)文件中取數(shù)據(jù)

2.把讀到的數(shù)據(jù)轉(zhuǎn)換成string類(lèi)型,顯示出來(lái)importjava.io.*;importjavax.swing.*;classExample8_1{publicstaticvoidmain(Stringargs[]){bytebuffer[]=newbyte[2056];Stringstr; try{Filefile=newFile("e:/第八章/第8章/tips.dat"); FileInputStreamfileInput=newFileInputStream(file);//創(chuàng)建輸入流對(duì)象

intbytes=fileInput.read(buffer,0,2056);//將流中的數(shù)據(jù)讀到數(shù)組buffer的指定位置

str=newString(buffer,0,bytes);//使用數(shù)組buffer創(chuàng)建字符串

}catch(Exceptione) {str=e.toString();}

JOptionPane.showMessageDialog(null,str);System.exit(0);}}

FileOutputStream類(lèi)的構(gòu)造方法方法一:直接用文件名FileOutputStream

fos=new

FileOutputStream("e:/temp/b.txt");如e:/temp/b.txt文件不存在,則自動(dòng)創(chuàng)建一個(gè)如e:/temp/b.txt文件已存在,則覆蓋其內(nèi)容方法二:用文件對(duì)象名Filef=newFile("e:/temp/b.txt");FileOutputStream

fos=newFileOutputStream(f);FileOutputStream類(lèi)的常用方法voidwrite()voidwrite(intb)voidwrite(byte[]b)longskip(longn)voidclose()voidfinalize()FileInputStream類(lèi)輸出數(shù)據(jù)的例子功能:從圖片a.jpg中讀取數(shù)據(jù)創(chuàng)建圖片b.jpg

FileInputStream類(lèi)輸出數(shù)據(jù)的例子關(guān)鍵點(diǎn):1、用輸入流將a.jpg中的內(nèi)容讀入內(nèi)存2、用輸出流將內(nèi)存中的內(nèi)容寫(xiě)入b.jpg中classFileRW

{intbytes;bytebuffer[]=newbyte[65560];FileInputStreamfileInput;FileOutputStream

fileOutput;

FileRW()//構(gòu)造方法

{takeimg();loadimg();

JOptionPane.showMessageDialog(null,"文件復(fù)制并更名成功!\n文件大小為:"+bytes);System.exit(0);}publicvoidtakeimg()//讀取圖像文件a.jpg{try{Filefile=newFile(“a.jpg”);//創(chuàng)建文件對(duì)象

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

bytes=fileInput.read(buffer,0,65560);

//將從文件file中讀取的數(shù)據(jù)寫(xiě)入到數(shù)組buffer中

}

catch(IOException

ei){System.out.println(ei);}}publicvoidloadimg() { try{

fileOutput=newFileOutputStream("b.jpg");//創(chuàng)建文件輸出流對(duì)象

fileOutput.write(buffer,0,bytes);//從數(shù)組buffer中讀取數(shù)據(jù)

}

catch(IOException

eo){System.out.println(eo);}}}publicclassExample8_2{publicstaticvoidmain(String[]args) {newFileRW(); }}FileInputStream類(lèi)輸出數(shù)據(jù)的例子a.jpgb.jpg字節(jié)數(shù)組FileInputStreamFileOutputStream文件輸入流文件輸出流FileReader類(lèi)和FileWriter的構(gòu)造方法FileReaderfir=newFileReader("b.txt");FileReaderfir=newFileReader(文件對(duì)象名);FileWriterfir=newFileWriter("b.txt");FileWriterfir=newFileWriter(文件對(duì)象名);BufferedReader類(lèi)和BufferedWriter類(lèi)是增加了緩沖區(qū)的輸入輸出流類(lèi),它們用來(lái)連接字符輸入輸出流,使數(shù)據(jù)處理速度大大加快,提高了讀寫(xiě)效率。數(shù)據(jù)首先寫(xiě)入緩沖區(qū),當(dāng)緩沖區(qū)的數(shù)據(jù)滿(mǎn)時(shí),數(shù)據(jù)才會(huì)寫(xiě)入所連接的輸入/輸出流;當(dāng)緩沖區(qū)未滿(mǎn)時(shí),可以用該類(lèi)的方法flush()將緩沖區(qū)的數(shù)據(jù)強(qiáng)制全部寫(xiě)入文件。

flush():將緩沖區(qū)中的數(shù)據(jù)強(qiáng)制送出

為加快數(shù)據(jù)傳輸速度,提高效率,有時(shí)輸出數(shù)據(jù)流會(huì)在提交數(shù)據(jù)之前把所要輸出的數(shù)據(jù)先鎖定在內(nèi)存緩沖區(qū),然后成批地進(jìn)行輸出,每次傳輸過(guò)程都以某特定數(shù)據(jù)長(zhǎng)度為單位傳輸數(shù)據(jù)。在這種方式下,在數(shù)據(jù)的末尾一般都會(huì)有一部分?jǐn)?shù)據(jù)由于數(shù)量不夠一個(gè)傳輸單位,而存留在緩沖區(qū)里,用方法flush()則可以將這部分?jǐn)?shù)據(jù)強(qiáng)制提交。BufferedReader類(lèi)和BufferedWriter類(lèi)的構(gòu)造方法

BufferedReader(字符輸入流對(duì)象)BufferedWriter(字符輸出流對(duì)象)字符流進(jìn)行讀寫(xiě)操作的常用方法StringreadLine();從輸入流按行讀取字符write(Strings,intoff,int

len);向輸出流寫(xiě)入多個(gè)字符close();關(guān)閉流例8—3本周實(shí)驗(yàn)作業(yè)1、利用File類(lèi)的相關(guān)方法,完成目錄和文件的創(chuàng)建、刪除和更名2、計(jì)算Fibonacii數(shù)列,a1=1,a2=1...an=an-1+an-2即前兩個(gè)數(shù)是1,從3個(gè)數(shù)開(kāi)始,每個(gè)數(shù)是前兩個(gè)數(shù)的和,計(jì)算數(shù)列的前20項(xiàng),并用字節(jié)文件流的方式輸出到一個(gè)文件,要求每5項(xiàng)1行。

本周實(shí)驗(yàn)作業(yè)3、編寫(xiě)一個(gè)程序,實(shí)現(xiàn)如下圖所示的可視化復(fù)制文件的功能8.3隨機(jī)存取文件和本地可執(zhí)行文件1、隨機(jī)存取文件流(RandomAccessFile類(lèi))2、本地可執(zhí)行文件(Runtime類(lèi))什么是隨機(jī)存取文件流?

RandomAccessFile類(lèi)可以讀寫(xiě)文件中任意位置上的字節(jié)、文本等數(shù)據(jù)既可以作為數(shù)據(jù)流的源,又可作為數(shù)據(jù)流目的。通過(guò)其不同的構(gòu)造函數(shù)來(lái)確定是輸出還是輸入。它是一個(gè)獨(dú)立分支的類(lèi),并不是InputStream或OutputStream的衍生類(lèi)隨機(jī)存取文件的原理可看做是在文件系統(tǒng)中的一個(gè)大型字節(jié)數(shù)組,有指針“讀”操作:指針從開(kāi)始位置讀取字節(jié)并向前移動(dòng)“寫(xiě)”操作:指針從開(kāi)始位置寫(xiě)入字節(jié)并向前移動(dòng)可通過(guò)相應(yīng)方法設(shè)置指針RandomAccessFile類(lèi)的構(gòu)造函數(shù)newRandomAccessFile(“part.txt”,“r”);//創(chuàng)建一個(gè)對(duì)文件名稱(chēng)為part的只讀隨機(jī)訪(fǎng)問(wèn)newRandomAccessFile(文件對(duì)象名,"rw");隨機(jī)存取文件流的常用方法該類(lèi)實(shí)現(xiàn)了DataInput接口和DataOutput接口DataOutput接口中的方法有:DataInput接口中的方法:隨機(jī)存取文件流的控制讀寫(xiě)指針

int

skipBytes(intn)

//使文件指針向后移動(dòng)指定的n個(gè)字節(jié)voidseek(longp)

//設(shè)置相對(duì)文件頭的指針偏移量,在此位置進(jìn)行下一次讀寫(xiě)操作。

longgetFilePointer()//獲取當(dāng)前指針位置(相對(duì)于起始位)隨機(jī)存取文件流的使用importjava.io.*;classExample8_4{ publicstaticvoidmain(String[]args) {try{

RandomAccessFilef=new

RandomAccessFile("a.txt","rw");

f.writeBytes("Zhang

si

ming");//將字符串寫(xiě)入輸出流

f.close(); }

catch(IOException

e){System.out.println(e);}}}Example8_4運(yùn)行結(jié)果沒(méi)有a.txt文件時(shí),自動(dòng)創(chuàng)建文件,并寫(xiě)入字符串寫(xiě)入前寫(xiě)入后隨機(jī)存取文件流實(shí)現(xiàn)一個(gè)英漢小詞典關(guān)鍵點(diǎn):創(chuàng)建用戶(hù)界面:兩個(gè)Panel,一個(gè)用來(lái)輸入,一個(gè)用來(lái)顯示錄入按鈕:使用RandomAccessFile輸出流在文件的指定位置添加內(nèi)容顯示按鈕:使用RandomAccessFile輸入流例8—5什么是本地可執(zhí)行文件?Runtime類(lèi)層次結(jié)構(gòu)

java.lang.Object

----java.lang.Runtime

作用:運(yùn)行本地機(jī)的可執(zhí)行文件,如本機(jī)的程序,自帶的計(jì)算器等等Runtime類(lèi)對(duì)象的創(chuàng)建應(yīng)用程序都有一個(gè)Runtime類(lèi)對(duì)象,使應(yīng)用程序能夠與運(yùn)行環(huán)境相連接,但應(yīng)用程序不能創(chuàng)建自己的Runtime類(lèi)對(duì)象Runtimert=Runtime.getRuntime();Runtime類(lèi)對(duì)象的常用方法如:rt.exec("javaExample8_5");Runtime類(lèi)使用實(shí)例1、運(yùn)行應(yīng)用程序8—52、調(diào)用Windows系統(tǒng)自帶的計(jì)算器3、設(shè)計(jì)一個(gè)簡(jiǎn)單的JAVA編譯器,可以編寫(xiě)源程序、編譯和運(yùn)行程序Example8_6Example8_7Example8_8重點(diǎn)8.4數(shù)據(jù)流與對(duì)象流1、數(shù)據(jù)流2、對(duì)象流數(shù)據(jù)流的來(lái)源過(guò)濾流概念FilterInputStream和FilterOutputStream,它們是抽象類(lèi)。使用過(guò)濾流時(shí),比一般流多一道工序,就是過(guò)濾。過(guò)濾流是建筑在其他流之上的,如過(guò)濾流的方法read()從下層流中讀取數(shù)據(jù),并過(guò)濾后傳給程序,而write()方法是先過(guò)濾后,再把數(shù)據(jù)寫(xiě)入下層流。過(guò)濾流作用對(duì)數(shù)據(jù)進(jìn)行處理提供了同步機(jī)制,使得某一時(shí)刻只有一個(gè)線(xiàn)程可以訪(fǎng)問(wèn)一個(gè)I/O流過(guò)濾流的子類(lèi)

DataInputStream和DataOutputStream

直接讀寫(xiě)java的內(nèi)構(gòu)類(lèi)型:intfloatboolean等BufferedInputStream

BufferedOutputStream

帶有緩沖區(qū)的輸入輸出LineNumberInputStream

行的計(jì)數(shù)PushbackInputStream

預(yù)讀一個(gè)字節(jié)的數(shù)據(jù),unread()方法:把剛讀過(guò)的字節(jié)退回?cái)?shù)據(jù)流的作用實(shí)現(xiàn)直接讀寫(xiě)java的各種內(nèi)構(gòu)類(lèi)型的原始數(shù)據(jù):intfloatboolean等設(shè)置指針偏移量怎樣使用數(shù)據(jù)流?要使用數(shù)據(jù)流必須使它附加在其他流上。例如:FileInputStreamf=newFileInputStream("openFile.dat");//先生成一個(gè)文件輸入流fDataInputStreambis=newDataInputStream(f);//再對(duì)文件流f進(jìn)行過(guò)濾輸出不同類(lèi)型數(shù)據(jù)值classExample8{publicstaticvoidmain(String

args[]){for(intx=1;x<=100;x++){

intfld1;longfld2;doublefld3;fld1=x+5;fld2=x*5;fld3=x*25;try{FileOutputStreamf=newFileOutputStream("t.dat");

DataOutputStream

bis=newDataOutputStream(f);bis.writeInt(fld1);bis.writeLong(fld2);bis.writeDouble(fld3);}

catch(IOExceptione){

System.out.println(e);}}System.exit(0);}}應(yīng)用數(shù)據(jù)流復(fù)制聲音文件classFileRW

{intbytes,f_length;bytebuffer[];

FileInputStreamfileInput;

FileOutputStream

fileOutput;DataInputStreamdataInput;

DataOutputStream

dataOutput;//構(gòu)造文件流和過(guò)濾流

FileRW() {Filefile=newFile("甜甜的.wma"); f_length=(int)file.length();//獲取文件大小,以便設(shè)置數(shù)組容量

buffer=newbyte[f_length];

takeimg();

loadimg();

JOptionPane.showMessageDialog(null,"文件復(fù)制并更名成功!\n文件大小為:"+f_length);System.exit(0);//退出程序}publicvoidtakeimg() { try{fileInput=newFileInputStream(file);

dataInput=newDataInputStream(fileInput);bytes=dataInput.read(buffer);}

catch(IOException

ei){System.out.println(ei);}}

publicvoidloadimg()//寫(xiě)入到新文件中

{ try{fileOutput=newFileOutputStream("aa.wma");

dataOutput=newDataOutputStream(fileOutput);

dataOutput.write(buffer,0,bytes); }catch(IOException

eo){System.out.println(eo);}}}

publicclassExample8_9{publicstaticvoidmain(String[]args) {newFileRW(); }}對(duì)象流的來(lái)源對(duì)象流的作用把對(duì)象作為一個(gè)整體進(jìn)行傳輸和存儲(chǔ)對(duì)象流的應(yīng)用實(shí)例程序功能:將文本框?qū)ο蠹捌渲凶址鳛橐粋€(gè)整體進(jìn)行讀寫(xiě)關(guān)鍵點(diǎn):1、創(chuàng)建對(duì)象輸出流,將文本框連同內(nèi)容寫(xiě)入文件2、創(chuàng)建對(duì)象輸入流,將文件內(nèi)容顯示例8—10本周實(shí)驗(yàn)內(nèi)容1、建立一個(gè)文本文件,輸入學(xué)生3門(mén)課的成績(jī),編寫(xiě)一個(gè)程序,讀入這個(gè)文件中的數(shù)據(jù),輸出每門(mén)課的成績(jī)的最小值,最大值和平均值。2、編寫(xiě)程序,保存一個(gè)文本對(duì)象并檢索對(duì)象的數(shù)據(jù)。什么是對(duì)象的序列化對(duì)象流進(jìn)行讀寫(xiě)時(shí),必須保證該對(duì)象是序列化的,才能保證對(duì)象被正確的讀出。把對(duì)象的狀態(tài)記錄下來(lái)就是對(duì)象的序列化怎樣進(jìn)行對(duì)象的序列化系統(tǒng)定義的類(lèi)大多都是序列化對(duì)象用戶(hù)自己定義的類(lèi)通過(guò)實(shí)現(xiàn)Serializable接口進(jìn)行序列化或繼承序列化類(lèi)Serializable接口屬于java.io包不含方法對(duì)象的序列化實(shí)例1、實(shí)現(xiàn)日期、地址對(duì)象在對(duì)象流中的保存2、讀取8-11中保存的數(shù)據(jù)例8—11例8—12什么是管道流管道流(PipeStreams)是把一個(gè)線(xiàn)程的輸出作為另一個(gè)線(xiàn)程的輸入。作用:實(shí)現(xiàn)在程序、線(xiàn)程、代碼塊間直接傳輸數(shù)據(jù)。實(shí)現(xiàn)通過(guò)PipedInputStream和PipedOutputStream。管道流的使用方法1:PipedOutputStreamout=newPipedOutputStream()//創(chuàng)建管道輸出流out………{將數(shù)據(jù)寫(xiě)入輸出流out}PipedIutputStreami

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論