版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java程序設(shè)計(jì)基礎(chǔ)第9章 輸入輸出流 Java語言為用戶提供了功能很強(qiáng)的輸入/輸出系統(tǒng)。Java語言中的輸入輸出概念和C+語言一樣,都是建立在流的基礎(chǔ)上。Java語言除了定義在系統(tǒng)類中的標(biāo)準(zhǔn)輸入/輸出外,還在java.io包中以類的形式提供了多種讀寫數(shù)據(jù)的輸入/輸出流。本章主要介紹了Java的標(biāo)準(zhǔn)輸入/輸出流、一般文件輸入/輸出流、過濾輸入/輸出流和File類等。 9.1標(biāo)準(zhǔn)輸入/輸出流 標(biāo)準(zhǔn)輸入/輸出流有3種標(biāo)準(zhǔn)流,都是由java.lang.System類來管理。 (1) 標(biāo)準(zhǔn)輸入:System.in用于程序輸入,主要用來讀入用戶輸入的內(nèi)容。 (2) 標(biāo)準(zhǔn)輸出:System.out用于程序
2、輸出,主要用來顯示輸出信息。 (3) 標(biāo)準(zhǔn)錯(cuò)誤:System.err用于顯示錯(cuò)誤信息。 9.1.1標(biāo)準(zhǔn)輸入流 標(biāo)準(zhǔn)輸入流用于從控制臺輸入信息。System.in類中提供了read()方法來讀取輸入內(nèi)容,其參數(shù)可以是一個(gè)字符、一個(gè)字節(jié)數(shù)組或字節(jié)數(shù)組的一部分。 格式為:System.in.read(); 其返回值為讀到的字符或字符串,若讀不到字符,則返回-1.一般采用輸入結(jié)束標(biāo)志(如回車鍵)來結(jié)束輸入。9.1.1標(biāo)準(zhǔn)輸入流 【例9-1】 用System.in.read()來讀取用戶輸入的字符,在輸入結(jié)束標(biāo)志后顯示輸入的字符數(shù)。import java.io.*;class Count public
3、static void main(String args) throws java.io.IOException int count=0; System.out.println(Please input chars:); while (System.in.read()!=n) count+; System.out.println(You have inputted +count + chars.); int r=-1; try r=System.in.read(); catch (IOException e) 9.1.1標(biāo)準(zhǔn)輸入流9.1.2標(biāo)準(zhǔn)輸出流 標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤流主要用來在用戶的終端窗
4、口輸出信息。標(biāo)準(zhǔn)輸出流用于輸出命令結(jié)果。而標(biāo)準(zhǔn)錯(cuò)誤流用于輸出程序運(yùn)行過程中發(fā)生的錯(cuò)誤。標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤流都是從PrintStream類導(dǎo)出的,因此可以使用PrintStream類的3個(gè)方法將信息輸出到流中。這3個(gè)方法是:print()、println()和write()。 (1) print()和println() 它們的功能基本相同,都是將字符串寫入流中。9.1.2標(biāo)準(zhǔn)輸出流 print()和println()的區(qū)別是:println()能自動(dòng)地將一個(gè)換行符加到輸出的字符串后面,而print()不能。println()還有一個(gè)特殊的用法,當(dāng)它不帶參數(shù)時(shí),只是輸出一個(gè)新行。 (2) writ
5、e() write()方法用來向流中寫入輸出信息,和read()方法一樣,它的參數(shù)也可以是一個(gè)字符、一個(gè)字節(jié)數(shù)組或字節(jié)數(shù)組的一部分。9.1.2標(biāo)準(zhǔn)輸出流 【例9-2】 使用println()輸出下列各種類型boolean、char、String、int、long、float、double的數(shù)據(jù)。 import java.io.*; class DTPrintTest public static void main(String args) boolean b=true; char c=a,b,c; String s=Java Language; int i=20; long l=123456;
6、 float f=123.4f; 9.1.2標(biāo)準(zhǔn)輸出流 double d=12345.67; System.out.println(b=+b); System.out.println(c=+c); System.out.println(s=+s); System.out.println(i=+i); System.out.println(l=+l); System.out.println(f=+f); System.out.println(d=+d); int r=-1; try r=System.in.read(); catch (IOException e) 9.1.2標(biāo)準(zhǔn)輸出流9.2 一
7、般文件的輸入/輸出流 一般文件的輸入/輸出流是通過java.io包中的兩個(gè)類和來實(shí)現(xiàn)的。 921 文件輸入流 Java語言通過類實(shí)現(xiàn)文件字節(jié)流的輸入。派生于InputStream,其類層次結(jié)構(gòu)如下所示: java.lang.Object java.io.InputStream java.io. 在具體實(shí)現(xiàn)時(shí),首先通過文件名、文件對象或文件描述符對象創(chuàng)建一個(gè)文件輸入流,然后通過這個(gè)流從文件中讀取數(shù)據(jù)。9.2.1 文件的輸入流 1)創(chuàng)建文件輸入流 創(chuàng)建文件輸入流對象的格式如下: 格式1: 對象名 = new (文件名); 格式2: 對象名 = null; 對象名 = new (文件名); 2) 從
8、文件中讀取數(shù)據(jù) 繼承了InputStream讀取數(shù)據(jù)的方法read(),所不同的是它從文件中讀取數(shù)據(jù)。9.2.1 文件的輸入流 【例9-3】 創(chuàng)建文件輸入流in,從jabc.tmp文件中讀取數(shù)據(jù),然后在讀入過程中將操作信息在屏幕上顯示。import java.io.*;class public static void main (String args) throws IOException output(); byte buffer = new byte80; in = null; in = new (jabc.tmp); if (in != null) System.out.println
9、(Begin to read from jabc.tmp.); in.read(buffer); System.out.println(You have Read bytes+ buffer + from file); in.close(); 9.2.1 文件的輸入流 public static void output() throws IOException out = null; out = new (jabc.tmp); byte sb=new byte80; System.out.println(Please to input byte array sb:); System.in.re
10、ad(sb); if (out!=null) System.out.println(Begin to write to jabc.tmp.); out.write(sb); System.out.println(You have Written bytes +sb+ to file.); out.close(); 9.2.1 文件的輸入流9.2.2 文件的輸出流 Java語言通過類實(shí)現(xiàn)文件字節(jié)流的輸出。派生于OutputStream,其類層次結(jié)構(gòu)如下所示:java.lang.Object java.io.OutputStream java.io. 與一樣,也通過文 件名、文件對象或文件描述符對
11、象創(chuàng)建一個(gè)文件輸出流,并通過這個(gè)流向文件中寫入數(shù)據(jù)。9.2.2 文件的輸出流 1)創(chuàng)建文件輸出流 創(chuàng)建文件輸出流對象的格式如下: 格式1: 對象名 = new (文件名); 格式2: 對象名 = null; 對象名 = new (文件名); 2)向文件寫入數(shù)據(jù) 繼承了OutputStream寫入數(shù)據(jù)的write()方法,它具有向文件寫入一個(gè)字節(jié)、一個(gè)字節(jié)數(shù)組和字節(jié)數(shù)組的一部分這三種形式。 9.2.2 文件的輸出流 【例9-4】 從鍵盤輸入一個(gè)字符串到字節(jié)數(shù)組sb,存儲在磁盤文件jabc.tmp中,并在寫入過程中將操作信息在屏幕上顯示。 import java.io.*; class publi
12、c static void main (String args) throws IOException out = null; out = new (jabc.tmp); byte sb=new byte80; System.out.println(Please to input byte array sb:); System.in.read(sb); 9.2.2 文件的輸出流 if (out!=null) System.out.println(Begin to write to jabc.tmp.); out.write(sb); System.out.println(You have Wr
13、itten bytes+sb+ to file.); out.close() int r=-1; try r=System.in.read(); catch (IOException e) 9.2.2 文件的輸出流9.2.2 文件的輸出流 【例9-5】 使用文件流的方法將一個(gè)文件的內(nèi)容復(fù)制到另一個(gè)文件中。 源程序代碼如下: import java.io.*; class public static void main(String args) try in = new (input.tmp); out = new (output.tmp); int c; while (c = in.read(
14、)! = -1) out.write ( c ); in.close (); out.close(); catch ( e) System.err.println (); catch ( IOException e) System.err.println (IOException); 9.3 過濾輸入/輸出流 過濾輸入/輸出流也稱緩沖文件的輸入/輸出流。Java的過濾輸入/輸出流是java.io包中的兩個(gè)類FilterInputStream和FilterOutputStream的子類。它們是:DataInputStream和DataOutputStreamBufferInputStream和B
15、ufferOutputStreamLineNumberInputStreamPushbackInputStreamPrintStream 過濾輸入/輸出流是指在讀寫數(shù)據(jù)的過程中可以處理數(shù)據(jù)的流。例如:通過類DataInputStream和DataOutputStream,可以按二進(jìn)制方式對基本數(shù)據(jù)類型的數(shù)據(jù)和字符串向文件進(jìn)行輸入和輸出。本節(jié)主要介紹DataInputStream和DataOutputStream過濾流的使用方法。 9.3.1 過濾輸入流 過濾輸入流DataInputStream派生于FilterInputStream,其類層次結(jié)構(gòu)如下: java.lang.Object jav
16、a.io.InputStream java.io.FilterInputStream java.io.DataInputStream 在使用DataInputStream時(shí),必須首先將DataInputStream連接到其它的輸入流上,然后使用DataInputStream的各種輸入方法。 9.3.1 過濾輸入流 1) DataInputStream的連接 如:將DataInputStream過濾流連接到標(biāo)準(zhǔn)輸入流上的語句如下: DataInputStream dis = new DataInputStream(System.in.read(); 又如:將DataInputStream過濾流連
17、接到文件輸入流上的語句如下: in = new (jabc.tmp); DataInputStream dis =new DataInputStream(in); 2)DataInputStream讀數(shù)據(jù)的方法 DataInputStream除了繼承FilterInputStream類中的所有方法外,還增加了基本數(shù)據(jù)類型的讀取方法,如表9-1所示。9.3.1 過濾輸入流 表9-1 DataInputStream讀取方法 方法 描述 read(byte) 從字節(jié)數(shù)組讀取數(shù)據(jù) read(byte,int,int) 從字節(jié)數(shù)組讀取部分?jǐn)?shù)據(jù) readboolean() 讀取一個(gè)布爾變量 readbyt
18、e() 讀取一個(gè)8位字節(jié) readChar() 讀取一個(gè)16位字節(jié) readDouble() 讀取64位雙精度浮點(diǎn)數(shù) readFloat() 讀取一個(gè)32位浮點(diǎn)數(shù) readFully(byte) 讀取字節(jié)數(shù)組,直到所有字節(jié)讀取完readFully(byte,int,int)讀取字節(jié)數(shù)組的一部分,直到所有字節(jié)讀取完readInt() 讀取一個(gè)32位整數(shù) readLine() 讀取以an,r,rn或EOF結(jié)束的一行 readLong() 讀取64位長整數(shù) readShort() 讀取一個(gè)16位短整數(shù) readUTF () 讀取一個(gè)UTF格式的字符串 readUTF(DataInput) 從給定流中
19、讀取一個(gè)UTF格式的字符串 readUnsignedByte()讀取一個(gè)8位無符號字節(jié) readUnsignedShort()讀取一個(gè)16位短整數(shù)9.3.1 過濾輸入流【例9-6】 將DataInputStream過濾流連接到標(biāo)準(zhǔn)輸入流上,然后使用DataInputStream的readLine()方法。 源程序結(jié)構(gòu)如下: DataInputStream dis = new DataInputStream(System.in.read(); String input; while (input =dis.readLine()!=null) 9.3.1 過濾輸入流 【例9-7】 采用過濾輸入流的
20、方法從文件jabc.tmp讀入一個(gè)整數(shù)和一個(gè)字符串,并在讀入過程中,用System.out.println()將操作信息顯示出來。import java.io.*;public class DataDemo public static void main(String args) throws IOExeption output(); in = null; in = new (jabc.tmp); DataInputStream dataIn = null; dataIn = new DataInputStream(in); if (dataIn!=null) System.out.print
21、ln (we begin to read from jabc.tmp); i=dataIn.readInt(); System.out.println (Read an integer+i); 9.3.1 過濾輸入流 str1=dataIn.readLine(); System.out.println (Read a string+str1); dataIn.close (); in.close (); int r=0; try r=System.in.read(); catch (IOException e) public static void output() throws IOExce
22、ption int j=34; String str2=Java filterstream; 9.3.1 過濾輸入流 out = null; out = new (jabc.tmp); DataOutputStream dataOut = null; dataOut = new DataOutputStream(out); if (dataOut!=null) System.out.println(We begin to write sth. to jabc.tmp.); System.out.println(Write an integer +j); dataOut.writeInt(j);
23、 System.out.println(Write a string +str2); dataOut.writeBytes(str2); dataOut.close(); out.close(); 9.3.1 過濾輸入流9.3.2 過濾輸出流 過濾輸出流DataOutputStream派生于FilterOutputStream,其類層次結(jié)構(gòu)如下: java.lang.Object java.io.OutputStream java.io.FilterOutputStream java.io.DataOutputStream 9.3.2 過濾輸出流 在使用DataOutputStream時(shí),和使
24、用DataInputStream一樣,必須首先將DataOutputStream連接到其它的輸出流上,然后使用DataOutputStream的各種輸出方法。 1)DataOutputStream的連接 例如:將DataOutputStream過濾流連接到文件輸出流上的語句如下: out = new (jabc.tmp); DataOutputStream dos =new DataOutputStream(out); 2)DataOutputStream的寫入數(shù)據(jù)的方法 9.3.2 過濾輸出流 表9-2 DataOutputStream寫入數(shù)據(jù)方法 方法 描述 write(byte) 從字節(jié)
25、數(shù)組寫入數(shù)據(jù) write(byte,int,int) 從字節(jié)數(shù)組寫入部分?jǐn)?shù)據(jù) writeBoolean() 寫入一個(gè)布爾變量 writeByte() 寫入一個(gè)8位字節(jié) writeChar() 寫入一個(gè)16位字節(jié) writeChars() 寫入一個(gè)字符串 writeDouble() 寫入64位雙精度浮點(diǎn)數(shù) writeInt() 寫入一個(gè)32位整數(shù) writeLong() 寫入64位長整數(shù) writeShort() 寫入一個(gè)16位短整數(shù) writeUTF() 寫入一個(gè)UTF格式的字符串9.3.2 過濾輸出流 【例9-8】采用過濾輸出流的方法向文件jabc.tmp寫入一個(gè)整數(shù)和一個(gè)字符串,并在寫入過
26、程中,用System.out.println()將操作信息顯示出來。import java.io.*;public class DataDemo public static void main (String args) throws IOException int i=34; String str=Java filterstream; out = null; out = new (jabc.tmp); DataOutputStream dataOut = null; dataOut = new DataOutputStream(out); 9.3.2 過濾輸出流 if (dataOut!=n
27、ull) System.out.println(We begin to write sth. to jabc.tmp.); System.out.println(Write an integer + i); dataOut.writeInt(i); System.out.println(Write a string + str); dataOut.writeBytes(str); dataOut.close(); out.close(); int r=0; try r=System.in.read (); catch (IoException e) 9.3.2 過濾輸出流9.4 File類 在
28、java.io包中,用File類封裝了文件對象。File類將目錄看作是帶有路徑名的文件對象。通過File類可以獲取有關(guān)文件和目錄的信息,并對它們進(jìn)行操作。但是,F(xiàn)ile類不能進(jìn)行從文件讀取數(shù)據(jù)或向文件寫入數(shù)據(jù)的操作。 在使用File類時(shí),首先要用構(gòu)造函數(shù)創(chuàng)建文件的對象,然后調(diào)用File類的方法對文件或目錄進(jìn)行I/O操作。9.4.1 File類的構(gòu)造函數(shù) File類提供了三個(gè)構(gòu)造函數(shù),可以用它們中的某一個(gè)創(chuàng)建有關(guān)對象。File (String path):根據(jù)路徑path創(chuàng)建文件對象。File (String path, String name):根據(jù)路徑path和文件名name創(chuàng)建文件對象。F
29、ile (, String name):根據(jù)目錄dir和文件名name創(chuàng)建文件對象。 例如: = new File(C:microsoftjava); = new File(C:microsoftjava,); = new File(java,); 9.4.2 File類的方法 表9-3 File類方法 方法 描述 canRead()是否是可讀文件 canWrite()是否是可寫文件 delete()刪除指定文件 equals(Object)將該對象與指定對象比較 exists()文件是否存在 getAbsolutePath )獲取文件的絕對路徑 getName()獲取文件名 getParen
30、t()獲取父目錄的名字 getPath()獲取文件的路徑 hashCode()結(jié)束文件的散列代碼 isAbsolute() 文件是否為絕對文件 isDirectory()是否為目錄 isFile()是否為文件 lastModified()返回上次修改時(shí)間 length()返回文件的長度 list()列出目錄中的文件 list()使用指定過濾器列出目錄中的文件 mkdir()創(chuàng)建目錄 mkdirs()創(chuàng)建該路徑下的所有目錄 renameTo(File)重命名一個(gè)文件 toString()返回代表文件對象的字符串9.4 File類 【例9-9】 根據(jù)參數(shù)“C:Visual Studio ProjectsPr
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024買賣房產(chǎn)合同樣本
- 女裝批量采購合同
- 醫(yī)院勞動(dòng)合同書2024年
- 房屋合同法律效力分析
- 2024年小區(qū)物業(yè)管理系統(tǒng)合同
- 2024年度XX房地產(chǎn)營銷代理合同
- 工程代理加盟居間合同樣本
- 旅游客運(yùn)車輛包車合同
- 2024代理商分銷合同探討與研究
- 2024養(yǎng)豬場荒山租賃合同
- 2024年人教版初一道德與法治上冊期中考試卷(附答案)
- 2024年第九屆“鵬程杯”六年級語文邀請賽試卷(復(fù)賽)
- 國開2024年《建筑結(jié)構(gòu)#》形考作業(yè)1-4答案
- DL-T1475-2015電力安全工器具配置與存放技術(shù)要求
- 漏檢分析改善措施
- 新制定《公平競爭審查條例》學(xué)習(xí)課件
- GB/T 44051-2024焊縫無損檢測薄壁鋼構(gòu)件相控陣超聲檢測驗(yàn)收等級
- TD/T 1060-2021 自然資源分等定級通則(正式版)
- 完整加快發(fā)展新質(zhì)生產(chǎn)力課件
- 三位數(shù)除以兩位數(shù)300題-整除-有標(biāo)準(zhǔn)答案
- 辦公室裝修工程施工方案講義
評論
0/150
提交評論