版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、輸入輸出流概述File (文件類)FileInputStreamFileOutputStreamFileReader 和 FileWriterRandomAccessFile PipedInputStream/PipedOutputStreamDateInputStream/ DateOutputStreamObjectInputStream/ ObjectOutputStreamPrintStream/PrintWriter1.概述一個(gè)計(jì)算機(jī)的最簡(jiǎn)單模型由下列三個(gè)管道組成: 輸入,處理,輸出。Java 的I/O 流庫(kù)提供大量的流類(在包java.io中), 其中,所有輸入流類都是InputS
2、tream(抽象類)或抽象類Reader的子類,而所有輸出流類都是OutputStream(抽象類)或抽象類Writer的子類 2.文件(File 類)File 類不允許訪問(wèn)文件的內(nèi)容,沒(méi)有可用于訪問(wèn)文件的read() 和write()方法.File 類主要用于命名文件,查詢文件屬性和處理目錄. 2.1. 創(chuàng)建文件對(duì)象構(gòu)造方法:1. public File(String s); (在Windows平臺(tái),分割符為“”, 在Linux/Unix上,為“/”, File 提供的參數(shù): File.separator)2. public File(String Directory, String s);
3、 2.2 查詢文件屬性File 類提供了幾個(gè)方法, 查詢文件屬性:文件是否存在文件是否讀保護(hù)文件是否寫(xiě)保護(hù)文件是否是一個(gè)目錄文件是否隱藏 2.3 查詢文件屬性String s=e:+File.separator+Thread1.java;File file=new File(s); String exists = file.exists() ? Yes : No; String canRead = file.canRead() ? Yes : No; String canWrite = file.canWrite() ? Yes : No; String isFile = file.isFil
4、e() ? Yes : No; String isHid = file.isHidden() ? Yes : No; String isDir = file.isDirectory() ? Yes : No; String isAbs = file.isAbsolute() ? Yes : No; Attr.java3. FileInputStreamFileInputStream典 型 地 表 示 一 種 順 序 訪 問(wèn) 的 文 本 文 件。 通過(guò) 使 用FileInputStream你 可 以 訪 問(wèn) 文 件 的 一 個(gè) 字 節(jié)、 幾 個(gè) 字 節(jié)或 整 個(gè) 文 件。由InputStream
5、 派生的類 構(gòu)造方法: FileInputStream(String name); /使用給定的文件名創(chuàng)建一個(gè)FileInputStream對(duì)象 FileInputStream(File file); /使用File對(duì)象創(chuàng)建一個(gè)FileInputStream對(duì)象 3.1 使用 FileInputStream讀取文件使用構(gòu)造方法來(lái)打開(kāi)一個(gè)到達(dá)該文件的輸入流:FileInputStream myFileStream; myFileStream = new FileInputStream (“myfile.dat);或: File myFile ; FileInputSteam myFileStre
6、am; myFile = new File( myfile.dat ); myFileStream = new FileInputStream(myFile); 3.2 處理 I/O 異常必須使用catch 塊檢測(cè)并處理I/O 異常(IOException ), 如: try FileInputStream ins= new FileInputStream (“myfile.dat); catch (IOException e) /文件I/O 錯(cuò)誤 System.out.println(“File read error: ” +e);3.3 從 FileInputStream中讀出read()
7、 的成員函數(shù) :int read() /讀取一個(gè)字節(jié) /到達(dá)輸入流末尾時(shí), 返回-1int read(byte b) /把多個(gè)字節(jié)讀到字節(jié)數(shù)組中 /到達(dá)輸入流末尾時(shí), 返回-1int read(byte b,int off, int len) /off指定read方法把數(shù)據(jù)存放在字節(jié)數(shù)組b 中的什么地方。 /len 指定該方法將讀取的最大字節(jié)數(shù)。 /到達(dá)輸入流末尾時(shí), 返回-13.4 關(guān)閉 FileInputStream兩 種 方 法 關(guān) 閉 : 顯式 關(guān) 閉 和 隱 式 關(guān) 閉, 隱 式 關(guān) 閉 是 自 動(dòng) 垃 圾 回 收 時(shí) 的 功 能。 顯 式 關(guān) 閉 為: myFileStream.c
8、lose(); int b; byte buffer=new byte2500; try File f=new File(E:lanhong, a.txt); FileInputStream readfile=new FileInputStream (f); b=readfile.read(buffer,0,2500); try String str=new String(buffer,0,b,Default); System.out.println(str); catch(UnsupportedEncodingException e) System.out.println(the encod
9、ing was not found: +e); catch (IOException e) System.out.println(File read Error); Example20_1.java4. FileOutputStreamFileOutputStream用 于 向 一 個(gè) 文 本 文 件 寫(xiě) 數(shù) 據(jù)。由OutputStream 派生的類 4.1 打開(kāi) FileOutputStream和 打 開(kāi) 輸 入 流 FileInputStream類似 :FileOutput Stream myFileStream; myFileStream = new FileOutputStream (
10、 “file.txt);或: File myFile ; FileOutputSteam myFileStream; myFile = new File(file.txt); myFileStream = new FileOutputStream(myFile); 4.2 寫(xiě)入一個(gè)流 write() 的成員函數(shù) : void write(byte b) /寫(xiě)b.length個(gè)字節(jié)到輸出流 void write (byte b, int off, int len)/b 是數(shù)據(jù),off 是數(shù)據(jù)的起始偏移量,len是要輸出的字節(jié)數(shù) public static void main(String arg
11、s) int b; byte buffer=new byte100; try System.out.println(輸入一行文本,并存入磁盤: ); b=System.in.read(buffer); /把從鍵盤輸入的字符存入buffer FileOutputStream writefile=new FileOutputStream(line.txt); writefile.write(buffer,0,b); /通過(guò)流把buffer 寫(xiě)入到文件line.txt 中 catch (IOException e) System.out.println(Error ); Example20_3.ja
12、va5. FileReader 和 FileWriter與FileInputStream和FileOutputStream等價(jià)的讀取器是FileReader類和FileWriter類。它們分別是Reader 和 Writer 的子類。構(gòu)造方法分別是: FileReader(String filename); FileWriter(String filename);如:FileReader file = new FileReader(“Student.txt”);不能按行讀取或?qū)懭?. 1 BufferedReaderFileReader類不能讀取一行,Java 提供了BufferedReade
13、r 類。構(gòu)造方法是: BufferedReader(Reader in);讀取文本行的方法是: readLine();如: BufferedReader in= BufferedReader(new FileReader(“Student.txt”); P261, 例4 Example20_4 TextArea text; BufferedReader in; Button button; FileReader file; EWindow() super(流的讀取); text=new TextArea(10,10); text.setBackground(Color.cyan); try F
14、ile f=new File(E:lanhong, a.txt); file=new FileReader(f); in=new BufferedReader(file); catch(FileNotFoundException e) catch(IOException e) button=new Button(讀取); button.addActionListener(this); setLayout(new BorderLayout(); setSize(40,40); setVisible(true); add(text,Center); add(button, South); addW
15、indowListener( new WindowAdapter() public void windowClosing(WindowEvent e)System.exit(0); ); public void actionPerformed(ActionEvent e) String s; if(e.getSource()=button) try while (s=in.readLine()!=null) text.append(s); catch(IOException exp) public class Example20_4 public static void main(String
16、 args) EWindow w=new EWindow(); w.pack(); 5. 2 BufferedWriter與BufferedReader 類相對(duì)應(yīng)的是BufferedWriter 類。構(gòu)造方法是: BufferedWriter(Writer out);寫(xiě)入文件的方法是: write(String s, int off, int len);如: BufferedWriter out= BufferedWriter(new FileReader(“hello.txt”); out.write(“how are you”, 0, s.length(); /寫(xiě)入緩沖區(qū) out.flus
17、h(); / 要寫(xiě)入文件,必須執(zhí)行 P263, 例5 Example20_5 TextArea text; BufferedWriter out; Button button; FileWriter tofile; FWindow() super(流的寫(xiě)入); text=new TextArea(10,10); text.setBackground(Color.cyan); try tofile=new FileWriter(hello.txt); out=new BufferedWriter(tofile); catch(FileNotFoundException e) catch(IOEx
18、ception e) button=new Button(寫(xiě)入); button.addActionListener(this);setLayout(new BorderLayout(); setSize(60,70); setVisible(true); add(text,Center); add(button,South);addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) setVisible(false);System.exit(0); ); public void action
19、Performed(ActionEvent e) String s; if(e.getSource()=button) try out.write(text.getText(),0,(text.getText().length(); out.flush(); catch(IOException exp) public class Example20_5 public static void main(String args) FWindow w=new FWindow(); w.pack(); ;P267, 例7 Example20_7 class Frame_FileDialog exten
20、ds Frame implements ActionListener FileDialog filedialog_save,filedialog_load; /聲明兩個(gè)文件對(duì)話框 MenuBar menubar1; Menu menu1;MenuItem item1,item2; TextArea text; BufferedReader in; FileReader file_reader; BufferedWriter out; FileWriter tofile; Frame_FileDialog() super(帶文件對(duì)話框的窗口); setSize(60,70); setVisibl
21、e(true); menubar1=new MenuBar(); menu1=new Menu(文件); item1=new MenuItem(打開(kāi)文件); item2=new MenuItem(保存文件); item1.addActionListener(this); item2.addActionListener(this); menu1.add(item1);menu1.add(item2);menubar1.add(menu1); setMenuBar(menubar1);/下面創(chuàng)建一個(gè)依賴于該窗口的保存文件對(duì)話框 filedialog_save=new FileDialog(this
22、,保存文件對(duì)話框, FileDialog.SAVE); filedialog_save.setVisible(false); /再創(chuàng)建一個(gè)依賴于該窗口的打開(kāi)文件對(duì)話框 filedialog_load=new FileDialog(this,打開(kāi)文件對(duì)話框, FileDialog.LOAD); filedialog_load.setVisible(false); filedialog_save.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) filedialog_save.setVis
23、ible(false); ); filedialog_load.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) filedialog_load.setVisible(false); ); addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) setVisible(false);System.exit(0); ); public void actionPerformed(Actio
24、nEvent e) if(e.getSource()=item1) filedialog_load.setVisible(true); String s; try /建立到文件file的FileReader 流,該文件通過(guò)File 類和對(duì)話框來(lái)確定。 File file=new File(filedialog_load.getDirectory(),filedialog_load.getFile(); file_reader=new FileReader(file); in=new BufferedReader(file_reader); while(s=in.readLine()!=null
25、) text.append(s+n); catch(FileNotFoundException e1) catch(IOException e2) try in.close(); file_reader.close(); catch(IOException exp) else if(e.getSource()=item2) filedialog_save.setVisible(true); try /建立到文件file的FileWriter流,該文件通過(guò)File 類和對(duì)話框來(lái)確定。 File file=new File(filedialog_save.getDirectory(),filedi
26、alog_save.getFile(); tofile=new FileWriter(file); out=new BufferedWriter(tofile); out.write(text.getText(),0,(text.getText().length(); out.flush(); catch(FileNotFoundException e1) catch(IOException e2) try out.close(); tofile.close(); catch(IOException exp) 6. RandomAccessFile 類由于File 類不能讀寫(xiě)文件,可使用Str
27、eam 類或RandomAccessFile 類來(lái)讀寫(xiě)。RandomAccessFile 類既不是輸入流類InputStream類的子類, 也不是輸出流類OutputStream類的子類。RandomAccessFile類創(chuàng)建的流的指向既可以作為源,也可以作為目的地。構(gòu)造方法分別是: RandomAccessFile(String name, String mode); RandomAccessFile(File file, String mode); 參數(shù)mode 取r(只讀)或rw(可讀寫(xiě)),決定文件的訪問(wèn)權(quán)利.創(chuàng)建對(duì)象時(shí)應(yīng)捕獲FileNotFoundException 異常,當(dāng)流進(jìn)行讀寫(xiě)
28、操作時(shí),應(yīng)捕獲IOException 異常。RandomAccessFile類中的方法: seek(long a); /a 確定文件指針距離文件開(kāi)頭的字節(jié)位置。 getFilePointer() 方法獲取當(dāng)前文件的指針的位置。 P271, 例 9in_and_out=new RandomAccessFile(“tom.txt”, “rw”);try for(int i=0; i=0; i-)/一個(gè)int 型數(shù)據(jù)占4個(gè)字節(jié),我們從 in_and_out.seek(i*4); /文件的第36個(gè)字節(jié)讀取最后面的一個(gè)整數(shù) System.out.println(“,” +in_and_out.readI
29、nt(); /每隔4個(gè)字節(jié)往前讀取一個(gè)整數(shù)7. 管道流管道是不同線程之間直接傳輸數(shù)據(jù)的基本手段。PipedInputStream類創(chuàng)建的對(duì)象稱為一個(gè)輸入管道, PipedOutputStream類創(chuàng)建的對(duì)象稱為一個(gè)輸出管道 。輸出管道與輸入管道連接形成一個(gè)傳輸數(shù)據(jù)的通道,使用這樣的管道,用戶可以在不同線程之間實(shí)現(xiàn)數(shù)據(jù)共享。7.1 PipedInputStream類PipedInputStream(): 創(chuàng)建一個(gè)管道輸入流,它還沒(méi)有被連接,在使用之前必須連接到一個(gè)管道輸出流。 使用connect(PipedOutputStream c) 方法連接。 PipedInputStream() in =
30、 new PipedInputStream(); PipedOutputStream() out = new PipedOutputStream(); in.connect(out); PipedInputStream(PipedOutputStream a); /創(chuàng)建一個(gè)管道輸入流,它被連接到由參數(shù)a指定的管道輸出流。7.2 PipedOutputStream類PipedOutputStream(): 創(chuàng)建一個(gè)管道輸出流,它還沒(méi)有被連接,在使用之前必須連接到一個(gè)管道輸入流。 使用connect(PipedInputStream c) 方法連接。 PipedOutputStream() out
31、 = new PipedOutputStream(); PipedInputStream() in = new PipedInputStream(); out.connect(in); PipedOutputStream(PipedInputStream a); /創(chuàng)建一個(gè)管道輸出流,它被連接到由參數(shù)a指定的管道輸入流。7.3 管道流的異常創(chuàng)建管道流都必須捕獲IOException 異常。 try PipedInputStream() in = new PipedInputStream(); catch (IOException e) P274, 例 11 Example20_11import
32、 java.io.*;public class Example20_11 public static void main(String args) PipedOutputStream out=null; PipedInputStream in=null; try out=new PipedOutputStream(); in=new PipedInputStream(); in.connect(out); catch (IOException e) thread1 one = new thread1(out,in); thread2 two = new thread2(in,out); one
33、.start(); two.start(); class thread1 extends Thread PipedOutputStream out; PipedInputStream in; byte b=1,2,3; thread1(PipedOutputStream a, PipedInputStream b) try out=a; in=b; out.connect(in); catch (IOException e) public void run() try out.write(b,0,3); catch (IOException e) class thread2 extends T
34、hread PipedOutputStream out; PipedInputStream in; byte a=new byte3; thread2(PipedInputStream a, PipedOutputStream b) try in=a; out=b; in.connect(out); catch (IOException e) public void run() try in.read(a,0,3); for (int i=0; i=2; i+) System.out.println( +ai); int c=a0+a1+a2; System.out.println( +c);
35、 catch (IOException e) 8. 數(shù)據(jù)流數(shù)據(jù)流允許程序按與機(jī)器無(wú)關(guān)的風(fēng)格讀取Java 原始數(shù)據(jù)。構(gòu)造方法: DateInputStream(InputStream in); DateOutputStream(OutputStream out); 常用方法: P276. P277, 例129. 對(duì)象流ObjectInputStream類和ObjectOutputStream類分別是DateInputStream和DateOutputStream類的子類.構(gòu)造方法: DateInputStream(InputStream in); DateOutputStream(OutputS
36、tream out);ObjectInputStream類和ObjectOutputStream 類創(chuàng)建的對(duì)象被稱為對(duì)象輸入流和對(duì)象輸出流.對(duì)象輸出流使用writeObject(Object obj) 方法寫(xiě)文件.對(duì)象輸入流使用readObject() 方法讀文件.9.1 創(chuàng)建對(duì)象流的方法ObjectInputStream/ DateOutputStream的指向是一個(gè)輸入/輸出流對(duì)象,因而要首先用FileInputStream/ FileOutputStream 創(chuàng)建一個(gè)文件流. 如: FileInputStream file_in= new FileInputStream(“a.txt”)
37、; ObjectInputStream object_in=new ObjectInputStream(file_in); FileOutputStream file_out= new FileOutputStream(“a.txt”); ObjectOutputStream object_out=new ObjectOutputStream(file_out); P281, 例 14public class Example20_14 extends Frame implements ActionListener TextArea text=null; Button reader=null,
38、writer=null; FileInputStream file_in=null; FileOutputStream file_out=null; ObjectInputStream object_in=null; ObjectOutputStream object_out=null; Example20_14() setLayout(new FlowLayout(); text=new TextArea(6,10); reader=new Button讀入對(duì)象); writer=new Button(“寫(xiě)出對(duì)象); reader.addActionListener(this); writer.addActionListener(this); setVisible(true);add(text); add(reader);add(writer); addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); pack(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 農(nóng)民公寓買賣合同范例
- 喪葬補(bǔ)償合同范例
- 個(gè)人房源出租合同范例
- 中信擔(dān)保貸款合同模板
- 假期找工作兼職合同范例
- 基坑沉降觀測(cè)合同范例
- 上海專業(yè)團(tuán)膳服務(wù)合同范例
- 專修設(shè)計(jì)合同范例
- 土方租賃合同范例
- 醫(yī)院柔性人才合同范例
- 中藥材技術(shù)創(chuàng)新中心的可行性研究報(bào)告
- 有機(jī)合成化學(xué)(山東聯(lián)盟)知到章節(jié)答案智慧樹(shù)2023年青島科技大學(xué)
- 商標(biāo)法題庫(kù)1(答案)
- TMF自智網(wǎng)絡(luò)白皮書(shū)4.0
- 電視劇《國(guó)家孩子》觀影分享會(huì)PPT三千孤兒入內(nèi)蒙一段流淌著民族大愛(ài)的共和國(guó)往事PPT課件(帶內(nèi)容)
- 所水力除焦設(shè)備介紹
- 改革開(kāi)放英語(yǔ)介紹-課件
- pet考試歷屆真題和答案
- 《企業(yè)員工薪酬激勵(lì)問(wèn)題研究10000字(論文)》
- 大學(xué)英語(yǔ)三級(jí)B真題2023年06月
- GB/T 7909-2017造紙木片
評(píng)論
0/150
提交評(píng)論