輸入輸出流帶倉庫系統作業_第1頁
輸入輸出流帶倉庫系統作業_第2頁
輸入輸出流帶倉庫系統作業_第3頁
輸入輸出流帶倉庫系統作業_第4頁
輸入輸出流帶倉庫系統作業_第5頁
已閱讀5頁,還剩41頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

輸入輸出流概述File(文件類)FileInputStreamFileOutputStreamFileReader和FileWriterRandomAccessFilePipedInputStream/PipedOutputStreamDateInputStream/DateOutputStreamObjectInputStream/ObjectOutputStreamPrintStream/PrintWriter1.概述一個計算機的最簡單模型由下列三個管道組成:輸入,處理,輸出。Java的I/O流庫提供大量的流類(在包java.io中),其中,所有輸入流類都是InputStream(抽象類)或抽象類Reader的子類,而所有輸出流類都是OutputStream(抽象類)或抽象類Writer的子類

2.文件(File類)File類不允許訪問文件的內容,沒有可用于訪問文件的read()和write()方法.File類主要用于命名文件,查詢文件屬性和處理目錄.

2.1.創建文件對象構造方法:1.publicFile(Strings);(在Windows平臺,分割符為“\”,在Linux/Unix上,為“/”,File提供的參數:File.separator)2.publicFile(StringDirectory,Strings);

2.2查詢文件屬性File類提供了幾個方法,查詢文件屬性:文件是否存在文件是否讀保護文件是否寫保護文件是否是一個目錄文件是否隱藏

2.3查詢文件屬性Strings="e:"+File.separator+"Thread1.java";Filefile=newFile(s);Stringexists=file.exists()?"Yes":"No";StringcanRead=file.canRead()?"Yes":"No";StringcanWrite=file.canWrite()?"Yes":"No";StringisFile=file.isFile()?"Yes":"No";StringisHid=file.isHidden()?"Yes":"No";StringisDir=file.isDirectory()?"Yes":"No";StringisAbs=file.isAbsolute()?"Yes":"No";Attr.java3.FileInputStreamFileInputStream典型地表示一種順序訪問的文本文件。通過使用FileInputStream你可以訪問文件的一個字節、幾個字節或整個文件。由InputStream派生的類

構造方法:

FileInputStream(Stringname);//使用給定的文件名創建一個FileInputStream對象

FileInputStream(Filefile);//使用File對象創建一個FileInputStream對象

3.1使用FileInputStream讀取文件使用構造方法來打開一個到達該文件的輸入流:FileInputStreammyFileStream;myFileStream=newFileInputStream(“myfile.dat");或:FilemyFile;FileInputSteammyFileStream;myFile=newFile("myfile.dat");myFileStream=newFileInputStream(myFile);3.2處理I/O異常必須使用catch塊檢測并處理I/O異常(IOException),如:try{FileInputStreamins=newFileInputStream(“myfile.dat");}catch(IOExceptione){//文件I/O錯誤

System.out.println(“Filereaderror:”+e);}3.3從FileInputStream中讀出read()的成員函數:intread()//讀取一個字節//到達輸入流末尾時,返回-1intread(byteb[])//把多個字節讀到字節數組中//到達輸入流末尾時,返回-1intread(byteb[],intoff,intlen)

//off指定read方法把數據存放在字節數組b中的什么地方。//len指定該方法將讀取的最大字節數。//到達輸入流末尾時,返回-13.4關閉FileInputStream兩種方法法關閉閉:顯式關閉閉和隱式式關閉閉,隱式式關閉是是自動動垃圾回回收時時的功能能。顯式式關閉閉為:myFileStream.close();intb;bytebuffer[]=newbyte[2500];try{Filef=newFile("E:\\lanhong\\","a.txt");FileInputStreamreadfile=newFileInputStream(f);b=readfile.read(buffer,0,2500);try{Stringstr=newString(buffer,0,b,"Default");System.out.println(str);}catch(UnsupportedEncodingExceptione){System.out.println("theencodingwasnotfound:"+e);}}catch(IOExceptione){System.out.println("FilereadError");}Example20_1.java4.FileOutputStreamFileOutputStream用于向一一個文文本文件件寫數數據。由OutputStream派生的類4.1打開FileOutputStream和打開輸輸入流流FileInputStream類似:FileOutputStreammyFileStream;myFileStream=newFileOutputStream(“file.txt");或:FilemyFile;FileOutputSteammyFileStream;myFile=newFile("file.txt");myFileStream=newFileOutputStream(myFile);4.2寫入一個流流write()的成員函數數:voidwrite(byteb[])//寫b.length個字節到輸輸出流voidwrite(byteb[],intoff,intlen)//b是數據,off是數據的起起始偏移量量,len是要輸出的字字節數publicstaticvoidmain(Stringargs[]){intb;bytebuffer[]=newbyte[100];try{System.out.println("輸入一行文文本,并存存入磁盤:");b=System.in.read(buffer);//把從鍵盤輸輸入的字符符存入bufferFileOutputStreamwritefile=newFileOutputStream("line.txt");writefile.write(buffer,0,b);//通過流把buffer寫入到文件件line.txt中}catch(IOExceptione){System.out.println("Error");}}Example20_3.java5.FileReader和FileWriter與FileInputStream和FileOutputStream等價的讀取取器是FileReader類和FileWriter類。它們分分別是Reader和Writer的子類。構造方法分分別是:FileReader(Stringfilename);FileWriter(Stringfilename);如:FileReaderfile=newFileReader(“Student.txt”);不能按行讀讀取或寫入入5.1BufferedReaderFileReader類不能讀取取一行,Java提供了BufferedReader類。構造方法是是:BufferedReader(Readerin);讀取文本行行的方法是是:readLine();如:BufferedReaderin=BufferedReader(newFileReader(“Student.txt”));P261,例4Example20_4TextAreatext;BufferedReaderin;Buttonbutton;FileReaderfile;EWindow(){super("流的的讀讀取取");text=newTextArea(10,10);text.setBackground(Color.cyan);try{Filef=newFile("E:\\lanhong\\","a.txt");file=newFileReader(f);in=newBufferedReader(file);}catch(FileNotFoundExceptione){}catch(IOExceptione){}button=newButton("讀取取");button.addActionListener(this);setLayout(newBorderLayout());setSize(40,40);setVisible(true);add(text,"Center");add(button,"South");addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicvoidactionPerformed(ActionEvente){Strings;if(e.getSource()==button){try{while((s=in.readLine())!=null)text.append(s);}catch(IOExceptionexp){}}}publicclassExample20_4{publicstaticvoidmain(Stringargs[]){EWindoww=newEWindow();w.pack();}}5.2BufferedWriter與BufferedReader類相對應應的是BufferedWriter類。構造方法法是:BufferedWriter(Writerout);寫入文件件的方法法是:write(Strings,intoff,intlen);如:BufferedWriterout=BufferedWriter(newFileReader(“hello.txt””));out.write(“howareyou”,0,s.length());//寫入緩沖沖區out.flush();//要寫入文文件,必必須執行行P263,例5Example20_5TextAreatext;BufferedWriterout;Buttonbutton;FileWritertofile;FWindow(){super("流的寫入入");text=newTextArea(10,10);text.setBackground(Color.cyan);try{tofile=newFileWriter("hello.txt");out=newBufferedWriter(tofile);}catch(FileNotFoundExceptione){}catch(IOExceptione){}button=newButton("寫入");button.addActionListener(this);setLayout(newBorderLayout());setSize(60,70);setVisible(true);add(text,"Center");add(button,"South");addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);System.exit(0);}});}publicvoidactionPerformed(ActionEvente){Strings;if(e.getSource()==button){try{out.write(text.getText(),0,(text.getText()).length());out.flush();}catch(IOExceptionexp){}}}}publicclassExample20_5{publicstaticvoidmain(Stringargs[]){FWindoww=newFWindow();w.pack();}};P267,例7Example20_7classFrame_FileDialogextendsFrameimplementsActionListener{FileDialogfiledialog_save,filedialog_load;//聲明兩兩個文文件對對話框框MenuBarmenubar1;Menumenu1;MenuItemitem1,item2;TextAreatext;BufferedReaderin;FileReaderfile_reader;BufferedWriterout;FileWritertofile;Frame_FileDialog(){super("帶文件件對話話框的的窗口口");setSize(60,70);setVisible(true);menubar1=newMenuBar();menu1=newMenu("文件");item1=newMenuItem("打開文文件");item2=newMenuItem("保存文文件");item1.addActionListener(this);item2.addActionListener(this);menu1.add(item1);menu1.add(item2);menubar1.add(menu1);setMenuBar(menubar1);//下下面創創建一一個依依賴于于該窗窗口的的保存存文件件對話話框filedialog_save=newFileDialog(this,"保存文文件對對話框框",FileDialog.SAVE);filedialog_save.setVisible(false);//再創建建一個個依賴賴于該該窗口口的打打開文文件對對話框框filedialog_load=newFileDialog(this,"打開文文件對對話框框",FileDialog.LOAD);filedialog_load.setVisible(false);filedialog_save.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){filedialog_save.setVisible(false);}});filedialog_load.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){filedialog_load.setVisible(false);}});addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){setVisible(false);System.exit(0);}});publicvoidactionPerformed(ActionEvente){if(e.getSource()==item1){filedialog_load.setVisible(true);Strings;try{//建立到文件件file的FileReader流,該文件件通過File類和對話框框來確定。。Filefile=newFile(filedialog_load.getDirectory(),filedialog_load.getFile());file_reader=newFileReader(file);in=newBufferedReader(file_reader);while((s=in.readLine())!=null)text.append(s+'\n');}catch(FileNotFoundExceptione1){}catch(IOExceptione2){}try{in.close();file_reader.close();}catch(IOExceptionexp){}}elseif(e.getSource()==item2){filedialog_save.setVisible(true);try{//建立到文件件file的FileWriter流,該文件件通過File類和對話框框來確定。。Filefile=newFile(filedialog_save.getDirectory(),filedialog_save.getFile());tofile=newFileWriter(file);out=newBufferedWriter(tofile);out.write(text.getText(),0,(text.getText()).length());out.flush();}catch(FileNotFoundExceptione1){}catch(IOExceptione2){}try{out.close();tofile.close();}catch(IOExceptionexp){}}}6.RandomAccessFile類由于File類不能讀寫寫文件,可可使用Stream類或RandomAccessFile類來讀寫。。RandomAccessFile類既不是輸輸入流類InputStream類的子類,也不是是輸出流類類OutputStream類的子類。。RandomAccessFile類創建的流流的指向既既可以作為為源,也可可以作為目目的地。構造方法分分別是:RandomAccessFile(Stringname,Stringmode);RandomAccessFile(Filefile,Stringmode);參數mode取r(只讀)或rw(可讀寫),,決定文件件的訪問權權利.創建對象象時應捕捕獲FileNotFoundException異常,當當流進行行讀寫操操作時,,應捕獲獲IOException異常。RandomAccessFile類中的方方法:seek(longa);//a確定文件件指針距距離文件件開頭的的字節位位置。getFilePointer()方法獲取取當前文文件的指指針的位位置。P271,例9in_and_out=newRandomAccessFile(“tom.txt”,““rw”);try{for(inti=0;i<data.length;i++){in_and_out.writeInt(data[i]);}for(longi=data.length-1;i>=0;i--)//一個int型數據占占4個字字節,我我們從{in_and_out.seek(i*4);//文件的第第36個個字節讀讀取最后后面的一一個整數數System.out.println(“,””+in_and_out.readInt());}//每隔4個個字節往往前讀取取一個整整數7.管道流管道是不不同線程之間直接接傳輸數數據的基基本手段段。PipedInputStream類創建的的對象稱稱為一個個輸入管管道,PipedOutputStream類創建的的對象稱稱為一個個輸出管管道。。輸出管管道與輸輸入管道道連接形形成一個個傳輸數數據的通通道,使使用這樣樣的管道道,用戶戶可以在在不同線線程之間間實現數數據共享享。7.1PipedInputStream類PipedInputStream():創建一個個管道輸輸入流,,它還沒沒有被連連接,在在使用之之前必須須連接到到一個管管道輸出出流。使用connect(PipedOutputStreamc)方法連接接。PipedInputStream()in=newPipedInputStream();PipedOutputStream()out=newPipedOutputStream();in.connect(out);PipedInputStream(PipedOutputStreama);//創建一個個管道輸輸入流,,它被連連接到由由參數a指定的管道輸輸出流。7.2PipedOutputStream類PipedOutputStream():創建一個管道道輸出流,它它還沒有被連連接,在使用用之前必須連連接到一個管管道輸入流。。使用connect(PipedInputStreamc)方法連接。PipedOutputStream()out=newPipedOutputStream();PipedInputStream()in=newPipedInputStream();out.connect(in);PipedOutputStream(PipedInputStreama);//創建一個管道道輸出流,它它被連接到由由參數a指定的管道輸輸入流。7.3管道流的異常常創建管道流都都必須捕獲IOException異常。try{PipedInputStream()in=newPipedInputStream();}catch(IOExceptione){}P274,例11Example20_11importjava.io.*;publicclassExample20_11{publicstaticvoidmain(Stringargs[]){PipedOutputStreamout=null;PipedInputStreamin=null;try{out=newPipedOutputStream();in=newPipedInputStream();in.connect(out);}catch(IOExceptione){}thread1one=newthread1(out,in);thread2two=newthread2(in,out);one.start();two.start();}}classthread1extendsThread{PipedOutputStreamout;PipedInputStreamin;byteb[]={1,2,3};thread1(PipedOutputStreama,PipedInputStreamb){try{out=a;in=b;out.connect(in);}catch(IOExceptione){}}publicvoidrun(){try{out.write(b,0,3);}catch(IOExceptione){}} }classthread2extendsThread{PipedOutputStreamout;PipedInputStreamin;bytea[]=newbyte[3];thread2(PipedInputStreama,PipedOutputStreamb){try{in=a;out=b;in.connect(out);}catch(IOExceptione){}}publicvoidrun(){try{in.read(a,0,3);for(inti=0;i<=2;i++){System.out.println(""+a[i]);}intc=a[0]+a[1]+a[2];System.out.println(""+c);}catch(IOExceptione){}}}8.數據流數據流允許程程序按與機器器無關的風格格讀取Java原始數據。構造方法:DateInputStream(InputStreamin);DateOutputStream(OutputStreamout);常用方法:P276.P277,例129.對象流ObjectInputStream類和ObjectOutputStream類分別是DateInputStream和DateOutputStream類的子類.構造方法:DateInputStream(InputStreamin);DateOutputStream(OutputStreamout);ObjectInputStream類和ObjectOutputStream類創建的對象象被稱為對象象輸入流和對對象輸出流.對象輸出流使使用writeObject(Objectobj)方法寫文件.對象輸入流使使用readObject()方法讀文件.9.1創建對象流的的方法ObjectInputStream/DateOutputStream的指向是一個個輸入/輸出出流對象,因因而要首先用用FileInputStream/FileOutputStream創建一個文件件流.如::FileInputStreamfile_in=newFileInputStream(““a.txt”);ObjectInputStreamobject_in=newObjectInputStream(file_in);FileOutputStreamfile_out=newFileOutputStream(“a.txt”);ObjectOutputStreamobject_out=newObjectOutputStream(file_out);P281,例14publicclassExample20_14extendsFrameimplementsActionListener{TextAreatext=null;Buttonreader=null,writer=null;FileInputStreamfile_in=null;FileOutputStreamfile_out=null;ObjectInputStreamobject_in=null;ObjectOutputStreamobject_out=null;Example20_14(){setLayout(newFlowLayout());text=newTextArea(6,10);reader=newButton讀入對象");writer=newButton(““寫出對象");reader.addActionListener(this);writer.addActionListener(this);setVisible(true);add(text);add(reader);add(writer);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});pack();setSize(300,300);}pub

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論