版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第7章 JAVA輸入輸出流及文件操作,7.1 流的概念7.2 基本輸入輸出流7.3 文件操作,學習要求,理解流的概念掌握在Java中進行文件讀、寫操作的方法,思考:,程序中數據的存儲方法有:單個、臨時的:變量多個、同類型、臨時的(退出即消失):數組多個、不同類型、臨時的:向量,若Java應用程序中需要較多或長久保留的數據,可以用什么方式進行存儲和調用更有效呢?,7.1 流的概念,流(stream)是對輸入輸出設備的一種抽
2、象表示,指在計算機的輸入與輸出之間運動的數據的序列。輸入流:代表從外設流入計算機的數據序列輸出流:代表從計算機流向外設的數據序列流的特點:數據的獲取和發(fā)送均按數據序列順序進行。Java中的流分為兩種(被抽象為四個類): 字節(jié)流: InputStream類和OutputStream類 字符流: Reader類和 Writer類 字符流比字節(jié)流更有效。,1. 字節(jié)流,從抽象類InputStream和OutputStr
3、eam派生出來的一系列類,這類流以字節(jié)(byte)為基本處理單位。,基本輸入流類InputStream的常用方法,◇ 從流中讀取數據:int read( ); //讀取一個字節(jié),返回值為所讀的字節(jié) int read( byte b[ ] ); 讀取多個字節(jié),放置到字節(jié)數組b中,通常讀取的字節(jié) 數量為b的長度,返回值為實際讀取的字節(jié)的數量int read( byte b[ ], in
4、t off, int len ); 讀取len個字節(jié),放置到以下標off開始字節(jié)數組b中, 返回值為實際讀取的字節(jié)的數量 int available( ); //返回值為流中尚未讀取的字節(jié)的數量long skip( long n ); //讀指針跳過n個字節(jié)不讀,返回值為實際跳過的字節(jié)數量◇ 關閉流: close( ); //流操作完畢后必須關閉,基本輸出流類OutputStrea
5、m 的常用方法,◇ 輸出數據:void write( int b ); //往流中寫一個字節(jié)bvoid write( byte b[ ] ); //往流中寫一個字節(jié)數組bvoid write( byte b[ ], int off, int len ); 把字節(jié)數組b中從下標off開始、長度為len的字節(jié)寫入流中◇ flush( ) //刷空輸出流,并輸出所有被緩存的字節(jié) 由于某些流支持緩存功能,該方法將
6、把緩存中所有內容強制輸出到流中?!?關閉流: close( ); //流操作完畢后必須關閉,2 字符流,從抽象類Reader和Writer派生出的一系列子類,這類流以16位的Unicode碼表示的字符(一個字符由兩個字節(jié)組成)為基本處理單位。常用字符流子類和功能,7.2 基本輸入輸出流,1. 鍵盤輸入和格式化輸出 Java有3個內置的標準流對象: 1)標準輸入流System.in: 用來讀取用戶從
7、鍵盤的輸入 2)標準輸出流System.out: 用來在屏幕上顯示信息 3)標準輸出流System.err: 用來顯示出錯信息(1)鍵盤輸入: 使用System.in對象的read()方法 例: char c=(char)System.in.read( );使用InputStreamReader 、BufferReader流類例: InputStreamReader isr=new Input
8、StreamReader(System.in); BufferReader br=new BufferReader(isr);,通過Scanner類,Scanner 在java.util包中:Scanner類主要方法:1)nextInt() ——提示輸入一個整數2)nextDouble() ——提示輸入一個浮點數3)readLine(String prompt) ——提示輸入一個字符串,直到行結束。例:
9、Scanner s=new Scanner ( );int a=s.nextInt();double x1=scanner.nextDouble();,(2)格式化輸出,用Java的標準輸出System.out,可以輸出不同類型的對象: 例:Int a=20; System.out .print(a) System.out .println(“大家好”) //加換行 用java.text包中的Number
10、Format類可以控制顯示格式,有三種方法:NumberFormat.getNumberInstance( ) //附加逗號NumberFormat.getCurrencyInstance( ) //貨幣符號NumberFormat.getPercentInstance( ) //百分號,例:import java.io.*; import java.text.*; Public class Test
11、Output{ Public static void main(String args[ ]){ double x=2345.123; String s1,s2,s3; NumberFormat n1=NumberFormat.getNumberInstance( ); NumberFormat c1=NumberFormat. getCurrencyInstance
12、( ); NumberFormat p1=NumberFormat. getPercentInstance( ) ; s1=n1.format(x); s2=c1.format(x); s3=p1.format(x); System.out.println(s1+” ”+ s2+” ”+ s3); } }結果: 2,345.123 ¥ 2,345.12 234,
13、512%,用戶自定義輸出格式—— 用DecimalFormat類和Format類 DecimalFormat類適合貨幣之類的格式化 Format類(在附帶的corejava包中,要把它加到classpath中)適合科技方面格式化,和C語言的printf函數功能類似。 DecimalFormat類的范例格式串,,Format的范例格式,首先加: import corejava.Format;f——固定格式的浮點數F
14、ormat.printf(“x的值是%10.2f\n”, x);d,i ——以十進制表示的整數s——字符串c——字符g,G——以一般格式表示浮點數,對小數用定點格式,對大數用指數格式x,X——以十六進制表示的整數o——以八進制表示例:Format.printf(“你的工資是%10.2f\n”, pay);,7. 3 文件操作,1. Java程序的文件與目錄管理 Java.io包中的File類專門用來管理磁盤文件
15、和目錄。每個File類的對象表示一個磁盤文件或目錄,對象屬性中包含名稱、長度、所含文件個數等信息。(1)創(chuàng)建File類對象的三種方法:File(String path); —指明磁盤文件或目錄名及其路徑 注意:目錄分隔符用System.dirSep表示 如:File f1=new File(“c:”+ System.dirSep+”sj”)File(String path, String name);,文件或
16、目錄的路徑,文件或目錄名,File(File dir, String name); (2)獲取文件或目錄屬性,已經存在的磁盤目錄,(3)文件或目錄的操作,注意:由于Java Applet程序是從網絡上下載到本地機器運行的,不可知也不可控,所以Java的安全機制禁止Java Applet程序訪問和存取本地文件,如果試圖在Java Applet程序中使用文件操作,則將引發(fā)Java的安全性異常。,2. 寫文本文件,方法一:用File
17、OutputStream打開文件my.txt,然后用PrintStream 對象p的println方法把字符串寫入文件中。例:FileOutputStream fout=new FileOutputStream(“my.txt”)PrintStream p=new PrintStream(fout);p.println(“要寫入文本文件中的內容”);p.close();,寫文本例子1,方法二:用FileWriter打開文件m
18、yf.txt,又創(chuàng)建了文本輸出流out,然后用out 的print(或者println)方法把字符串寫入文件中。 例: FileWriter fw= new FileWriter(“myf.txt”); PrintWriter out=new PrintWriter(fw); out.print(“要寫入文本文件中的內容”); out.close(); //關于輸出 fw.close(); //關閉文件
19、,寫文本例子2,3. 讀文本文件,方法一:用FileInputStream打開文件my.txt,然后建立DataInputStream的 對象in(文件流),使用in的readLine()方法以一行為單位讀出my.txt文件中的所有字符串。例:FileInputStream fs=new FileInputStream(“my.txt”)DataInputStream in=new DataInputStream(fs);w
20、hile(in.available( )!=0) System.out.println( in.readLine() );in.close(); //關閉輸入流,讀文本例子1,方法二:用FileReader打開文件myf.txt,然后用BufferedReader類的對象br作為文件流,用br 的readline()讀取文件中的字符串。 例: FileReader fr= new FileReader (“myf.txt”)
21、; BufferedReader br=new BufferedReader(fr);String record=new String( );Int recCount=0;While ((record=br.readLine())!=null){ recCount++; System.out.println(recCount+”:”+ record);} br.close(); //關于緩存
22、fr.close(); //關閉文件,讀文本例子2,4. 程序對文件的隨機訪問,用RandomAccessFile類可以實現(xiàn)對文件的隨機讀寫操作,即可以在文件的任意位置執(zhí)行數據讀寫;創(chuàng)建RandomAccessFile的對象例:File mf= new File (“myf.txt”); RandomAccessFile myRAF= new RandomAccessFil
23、e (mf, ”rw”);,訪問模式:rw: 可讀、可寫 r: 只讀,作為數據源的文件,對文件位置指針的操作,利用getPointer( )方法可以獲得當前文件位置指針從文件頭算起的絕對位置: public long getPointer( );利用seek( )方法可以將指針移動到pos指定的文件位置: public void seek( long pos );利用length( )方法可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論