java中關(guān)于異常處理與輸入輸出_第1頁(yè)
java中關(guān)于異常處理與輸入輸出_第2頁(yè)
java中關(guān)于異常處理與輸入輸出_第3頁(yè)
java中關(guān)于異常處理與輸入輸出_第4頁(yè)
java中關(guān)于異常處理與輸入輸出_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第第5章章 異常處理與輸入輸出異常處理與輸入輸出異常處理輸入輸出一、異常異常指的是程序運(yùn)行過程中出現(xiàn)的非正常事件。其中非正常事件指的是被0除、用戶輸入出錯(cuò)、找不到文件等異常指的是運(yùn)行錯(cuò)誤,編譯錯(cuò)誤不是異常Java對(duì)異常的處理1.提供大量的異常類(1) Java預(yù)定義了很多Exception類和Error類及其大量的子類來描述異常。這些類都是Throwable類的子類 。(2) Java的異常類分為 運(yùn)行時(shí)異常類:繼承RuntimeException的類 非運(yùn)行時(shí)異常類:除RuntimeException類及其子類外 見教材p1312.異常處理方式(1)系統(tǒng)自動(dòng)處理 一旦程序中出現(xiàn)異常,運(yùn)行時(shí)系

2、統(tǒng)將會(huì)自動(dòng)產(chǎn)生一個(gè)相應(yīng)的異常類對(duì)象,每一個(gè)異常事件都由一個(gè)異常對(duì)象來描述。 public class ExceptionExample static int num; public static void main(String args) num=Integer.parseInt(args0); System.out.println(100整除+num+=+100/num); 本程序若輸入num值為0,則產(chǎn)生ArithmeticException異常類對(duì)象(2)程序員主動(dòng)干預(yù)異常運(yùn)用異常處理機(jī)制對(duì)可能出現(xiàn)的異常進(jìn)行干預(yù),干預(yù)手段兩種: a.使用trycatchfinally結(jié)構(gòu)對(duì)異常進(jìn)行捕獲

3、和處理 b.通過throw或throws關(guān)鍵字將異常拋出。a.使用trycatchfinally結(jié)構(gòu)對(duì)異常進(jìn)行捕獲和處理其語(yǔ)法格式:try/程序代碼(可能導(dǎo)致異常的代碼 )catch(異常類類型1 對(duì)象名1)/程序代碼 catch(異常類類型2 對(duì)象名2)/程序代碼 finally/程序代碼 說明請(qǐng)見教材p133例:利用trycatchfinally結(jié)構(gòu)捕獲ExceptionExample類中所有的異常public class ExceptionExample static int num; public static void main(String args) try num= Integ

4、er.parseInt(args0); System.out.println(100整除整除+num+=+100/num); catch(ArrayIndexOutOfBoundsException e) System.out.println(你還沒有輸入呢,請(qǐng)輸入整數(shù)值你還沒有輸入呢,請(qǐng)輸入整數(shù)值!); catch(NumberFormatException e) System.out.println(你輸入的是小數(shù)或字符,請(qǐng)輸入整數(shù)值你輸入的是小數(shù)或字符,請(qǐng)輸入整數(shù)值!); catch(ArithmeticException e) System.out.println(你輸入的是你輸入的是

5、0,請(qǐng)輸入非,請(qǐng)輸入非0整數(shù)值整數(shù)值!); b.通過throw或throws關(guān)鍵字將異常拋出(a)利用throw關(guān)鍵字直接拋出異常在編寫程序的過程中,對(duì)可能會(huì)引發(fā)異常的地方直接使用throw語(yǔ)句自行拋出,當(dāng)直接利用throw語(yǔ)句拋出異常時(shí),一定要對(duì)拋出的異常進(jìn)行捕獲。語(yǔ)法格式: throw new 異常類類型(信息) 其中異常類類型為系統(tǒng)異常類名或用戶自定義的異常類名。toString方法可返回上面的信息內(nèi)容 例:直接拋出異常以處理分母輸入為0的情況public class ExceptionDemo static int num; public static void main(String

6、 args) try num= Integer.parseInt(args0); if (num=0 ) throw new ArithmeticException(你應(yīng)該輸入非0整數(shù)值!); System.out.println(100整除+num+=+100/num); catch(ArrayIndexOutOfBoundsException e) System.out.println(你還沒有輸入呢,請(qǐng)輸入整數(shù)值!); catch(NumberFormatException e) System.out.println(你輸入的是小數(shù)或字符,請(qǐng)輸入整數(shù)值!); catch(Arithmet

7、icException e) System.out.println(錯(cuò)誤類型:+e.toString(); (b)利用throws關(guān)鍵字間接拋出異常在方法的聲明處,利用throws關(guān)鍵字拋出異常。 語(yǔ)法格式如下: 方法名() throws 異常類異常類1,異常類2,例:ExceptionDemo類中的DivMethod方法計(jì)算100/num的值,并在該方法中拋出異常。 MyDemo類調(diào)用DivMethod方法時(shí),捕獲其拋出的異常。class ExceptionDemo public static void DivMethod(int num) throws NumberFormatExcept

8、ion, ArithmeticException, ArrayIndexOutOfBoundsException System.out.println(100整除+num+=+100/num); public class MyDemo public static void main(String args) try int n; n= Integer.parseInt(args0); ExceptionDemo.DivMethod(n); catch(ArrayIndexOutOfBoundsException e) System.out.println(你還沒有輸入呢,請(qǐng)輸入整數(shù)值!); c

9、atch(NumberFormatException e) System.out.println(你輸入的是小數(shù)或字符,請(qǐng)輸入整數(shù)值!); catch(ArithmeticException e) System.out.println(你輸入的是0,請(qǐng)輸入非0整數(shù)值!); 三、自定義異常語(yǔ)法結(jié)構(gòu):語(yǔ)法結(jié)構(gòu):class 自定義異常類名自定義異常類名 extends Exception(Throwable) public 自定義異常類名自定義異常類名 () public 自定義異常類名自定義異常類名 (String str)super(str);用throw語(yǔ)句來拋出自定義的異常類,例:要求在命令

10、行后輸入學(xué)生成績(jī),成績(jī)值在0,100之間。當(dāng)輸入的數(shù)值不在0,100之間時(shí),直接拋出自定義的異常類InputException類 。同時(shí)要求捕獲所有可能出現(xiàn)的異常。自定義的異常:class InputException extends Exception public InputException() public InputException(String str) super(str); public class Scores public static void main(String args) try float score; System.out.println(請(qǐng)輸入成績(jī)值!)

11、score=Math.abs(Float.parseFloat(args0); if(score=100) throw new InputException(); System.out.println(你輸入的成績(jī)值:+score); catch(ArrayIndexOutOfBoundsException e) System.out.println(你還沒有輸入呢,請(qǐng)輸入成績(jī)值!); catch(NumberFormatException e) System.out.println(你輸入的是字符,請(qǐng)輸入數(shù)值!); catch(InputException e) System.out.pri

12、ntln(你輸入的數(shù)值不在指定范圍內(nèi),請(qǐng)輸入0,100之間的值!); 輸入輸出數(shù)據(jù)的輸入輸出是程序的主要任務(wù)。進(jìn)行程序設(shè)計(jì)時(shí),有時(shí)需將結(jié)果保存到指定的文件、數(shù)據(jù)庫(kù)中等等。Java語(yǔ)言的輸入輸出數(shù)據(jù)是以流(Stream)的形式出現(xiàn)的。流分為輸入流(Input Stream)和輸出流(Output Stream) 輸入流和輸出流的流向 1 1. .Java I/OJava I/O系統(tǒng)系統(tǒng) Java程序的輸入和輸出是由Java I/O系統(tǒng)負(fù)責(zé)處理的I/O類庫(kù)位于java.io包中 2.幾個(gè)重要的居于幾個(gè)重要的居于java.io包中類層次頂部的流類包中類層次頂部的流類 類 說明 File 支持文件與目

13、錄操作的類 InputStream 字節(jié)輸入流類 OutputStream 字節(jié)輸出流類 Reader 字符輸入流類 Writer 字符輸出流類 RandomAccessFile 隨機(jī)訪問文件類3.文件管理類(File) Java中的File類是專門對(duì)目錄和文件進(jìn)行管理的類對(duì)目錄的管理包括建立目錄、刪除目錄、重命名目錄以及建立與刪除臨時(shí)目錄;對(duì)文件的管理包括建立空文件、刪除文件、重命名文件、獲取或修改文件的各種屬性以及建立與刪除臨時(shí)文件。 Java中的File類是不能讀寫文件的。 File類的構(gòu)造方法 File(String pathname)該構(gòu)造方法中的參數(shù)pathname,指定所創(chuàng)建的F

14、ile類對(duì)象對(duì)應(yīng)的目錄或文件 File myfile=new File(:jdkmyjava);File myfile=new File(“c:jdkmyjavaMyJava.class);創(chuàng)建的對(duì)象myfile表示:jdkmyjava目錄中的文件MyJava.class。(2) File(File parent, String child);該構(gòu)造方法用一個(gè)已經(jīng)創(chuàng)建的對(duì)應(yīng)于某個(gè)目錄的File類對(duì)象,作為路徑參數(shù)來創(chuàng)建File類對(duì)象,如:File MyFile=new File(:jdkmyjava);File MyFile1=new File(MyFile,MyJava.java);File

15、類的成員方法 (p142表5-2)public String getName()返回目錄或文件名public String getPath()返回目錄或文件所在路徑public String getAbsolutePath()以字符串形式返回目錄或文件的絕對(duì)路徑public String getParent()以字符串形式返回目錄或文件的父目錄例例:請(qǐng)顯示c盤中的所有內(nèi)容import java.io.*;class ListFileName public static void main(Stringargs) Stringallname; File myfile1=new File(c:);

16、 if(myfile1.isDirectory() allname=myfile1.list(); if(allname.length=0) System.out.println(“該目錄下沒有任何內(nèi)容!); else System.out.println(“該目錄下的內(nèi)容有:); for (int i=0;iallname.length;i+) System.out.println(allnamei); else System.out.println(不存在該目錄); 例:例:創(chuàng)建文件和目錄import java.io.*;class CMFileObject public static v

17、oid main(Stringargs) try File myfile1=new File(c:myjdk); File myfile2=new File(myfile1,YouJava.java); System.out.println(兩個(gè)對(duì)象創(chuàng)建完畢!); if(myfile1.exists() System.out.println(myfile1+存在!); else myfile1.mkdir(); System.out.println(myfile1+已創(chuàng)建!); if(myfile2.exists() System.out.println(myfile2+存在!); else

18、System.out.println(myfile2+文件不存在,請(qǐng)創(chuàng)建!); myfile2.createNewFile(); System.out.println(myfile2+文件已創(chuàng)建!); catch(IOException e) 例例顯示文件的一些屬性import java.io.*;import java.util.Date;class ShowFileAttri public static void main(Stringargs) File f=new File(“myfile.txt”) if(f.exists() System.out.println(文件tt屬性);

19、System.out.println(名稱:tt+f.getName(); System.out.println(可讀性:tt+f.canRead(); System.out.println(可寫性:tt+f.canWrite(); System.out.println(隱藏性:tt+f.isHidden(); System.out.println(長(zhǎng)度:tt+f.length(); Date date=new Date(f.lastModified(); System.out.println(最后修改日期:t+date.toString();elseSystem.out.println(f.

20、getName()+“不存在!”); 練習(xí)(P179):設(shè)計(jì)一個(gè)文件管理器。要求從命令行輸入文件的路徑(第一個(gè)參數(shù))和文件名(第二個(gè)參數(shù)),從而實(shí)現(xiàn)顯示文件、刪除文件等基本操作。要求捕獲所有的異常。4、Java中對(duì)文件進(jìn)行讀寫的類 字節(jié)流類字符流類文件隨機(jī)讀取類(RandomAccessFile)(1)字節(jié)流字節(jié)流是指數(shù)據(jù)流中最小的數(shù)據(jù)單元是字節(jié),它為處理字節(jié)的輸入和輸出提供了方便,如使用字節(jié)流讀取或輸出二進(jìn)制數(shù)據(jù) 字節(jié)流分為字節(jié)輸入流和字節(jié)輸出流 在I/O類庫(kù)中,它們分別由InputStream和OutputStream表示InputStream、OutputStream都是抽象類,不能被實(shí)

21、例化,該類中所有的方法在出錯(cuò)條件下都會(huì)引發(fā)IOException異常 InputStream和OutputStream類的讀寫是面向字節(jié)的,其實(shí)現(xiàn)讀/寫的操作方法是read()/write()方法 還有其它的方法參見教材p147149字節(jié)輸入流字節(jié)輸入流InputStream部分子類繼部分子類繼承關(guān)系圖承關(guān)系圖 InputStream 基本字節(jié)輸入流FileInputStream 基本文件輸入流PipedInputStream 用作線程通信的管道輸入流ByteArrayInputStream 字節(jié)數(shù)組輸入流FilterInputStream 在基本輸入流中增加新功能的抽象輸入流Buffered

22、InputStream 基本緩沖區(qū)輸入流DataInputStream 讀取原始數(shù)據(jù)類型的輸入流利用FileInputStream實(shí)現(xiàn)字節(jié)流文件的順序讀取類的構(gòu)造方法如下FileInputStream(String name) throws FileNotFoundException該方法中name為本地文件名,若希望程序可以從文件讀取字節(jié)數(shù)據(jù),必須創(chuàng)建一個(gè)FileInputStream對(duì)象與要讀取的文件建立聯(lián)系。例:將ByteFileRead.java文件內(nèi)容輸出到屏幕上 import java.io.*;public class ByteFileRead public static voi

23、d main(String args) throws IOException FileInputStream f1=new FileInputStream(ByteFileRead.java); int data=f1.read(); while(data!=-1) System.out.print(char)data); data=f1.read(); f1.close(); FileInputStream(File file) throws FileNotFoundException該方法中file是文件對(duì)象,可以使用文件對(duì)象指定文件,再創(chuàng)建一個(gè)FileInputStream對(duì)象間接的與文

24、件對(duì)象所指定的文件建立聯(lián)系。如,可以使用文件對(duì)象指定ByteFileRead.java文件,再與文件輸入流建立聯(lián)系:File f=new File(ByteFileRead.java);FileInputStream f1=new FileInputStream(f);然后調(diào)用不同形式的read()方法順序讀取文件ByteFileRead.java的內(nèi)容 字節(jié)輸出流字節(jié)輸出流OutputStream部分子類部分子類繼承關(guān)系圖繼承關(guān)系圖利用FileOutputStream實(shí)現(xiàn)字節(jié)流文件的順序?qū)懭朐擃惖臉?gòu)造方法如下 FileOutputStream(String name) throws File

25、NotFoundException該方法中name為本地文件名,若希望程序可以將數(shù)據(jù)寫入文件,必須創(chuàng)建一個(gè)FileOutputStream對(duì)象與要寫入的文件建立聯(lián)系。然后調(diào)用不同形式的write()方法向指定的文件寫入數(shù)據(jù)。 FileOutputStream(String name,boolean append) throws FileNotFoundException該方法中append的值為false時(shí),以覆蓋的方式向文件寫入數(shù)據(jù),否則,以追加的方式向文件寫入數(shù)據(jù)。其它的同。 FileOutputStream(File file) throws FileNotFoundException該

26、方法中file是文件對(duì)象,可以使用文件對(duì)象指定文件,再創(chuàng)建一個(gè)FileOutputStream對(duì)象間接地與文件對(duì)象所指定的文件建立聯(lián)系。如,可以使用文件對(duì)象指定ByteFileWrite.txt文件,再與文件輸出流建立聯(lián)系:File f=new File(ByteFileWrite.txt );FileOutputStream f2=new FileOutputStream(f);然后調(diào)用不同形式的write()方法向文件ByteFileWrite.txt寫入數(shù)據(jù)。FileOutputStream(File file,boolean append) throws FileNotFoundExc

27、eption該方法中append的值為false時(shí),以覆蓋的方式向文件寫入數(shù)據(jù),否則,以追加的方式向文件寫入數(shù)據(jù)。其它的同。 例:要求從鍵盤輸入一串字符串到指定的文件中import java.io.*;public class ByteFileWrite public static void main(String args) throws IOException byte inChar=new byte30; System.out.println(請(qǐng)輸入一串字符串:); System.in.read(inChar,0,30); FileOutputStream fos=new FileOut

28、putStream(myfile.txt,true); fos.write(inChar); fos.close(); System.out.println(寫文件完畢!rn可在本程序同一目錄下查看到myfile.txt文件!); 練習(xí):請(qǐng)將ByteFileRead.java文件內(nèi)容拷貝到文件myfile.txt文件中。(2)字符流字符流是指數(shù)據(jù)流中最小的數(shù)據(jù)單元是字符。字符流分為字符輸入流和字符輸出流,在I/O類庫(kù)中,它們分別由Reader和Writer表示。Reader、Writer都是抽象類,不能被實(shí)例化,該類中所有的方法在出錯(cuò)條件下都會(huì)引發(fā)IOException異常。Reader和Wr

29、iter類的讀寫是面向字符的,其實(shí)現(xiàn)讀/寫的操作方法也是read()/write()方法。字符輸入流字符輸入流Reader部分子類繼承關(guān)部分子類繼承關(guān)系圖系圖Reader 基本字符輸入流InputStreamReader 轉(zhuǎn)換InputStream為Reader,可以指定數(shù)據(jù)源的字符編碼FileReader InputStreamReader類的子類,是用于從文件中讀入字符流的類BufferedReader 具有緩沖功能的字符輸入類LineNumberReader 為其它Reader提供讀緩沖區(qū),同時(shí)可以跟蹤字符輸入流中的行號(hào)FilterReader 擴(kuò)展其它Reader的功能字符輸入流字符輸

30、入流Writer部分子類繼承關(guān)系部分子類繼承關(guān)系圖圖Writer基本字符輸出流OutputStreamWriter轉(zhuǎn)換OutputStream為Writer,可以指定數(shù)據(jù)匯的字符編碼FileWriter OutputStreamWriter類的子類,是用于向文件中寫入字符流的類BufferedWriter 具有緩沖功能的字符輸出類 FilterWriter 擴(kuò)展其它Writer的功能。PrintWriter 輸出格式化數(shù)據(jù)利用文件字符流讀取文件內(nèi)容例:將例:將ByteFileRead.java文件內(nèi)容拷貝到CopyCharacterFileRead.txt新文件中import java.io.

31、*;public class CharacterFileRead public static void main(String args) throws IOException try FileReader f1=new FileReader(ByteFileRead.java); FileWriter f2=new FileWriter(CopyCharacterFileRead.doc); int data=f1.read(); while(data!=-1) f2.write(data); data=f1.read(); f1.close(); f2.close(); System.ou

32、t.println(你已成功將ByteFileRead.java文件內(nèi)容拷貝到CopyCharacterFileRead.txt文件中,rn可在本程序同一目錄下查到!); catch(FileNotFoundException e) System.out.println(文件ByteFileRead.java不存在!); 字符輸入緩沖流BufferedReader BufferedReader類是Reader類的子類是一個(gè)字符輸入緩沖流類,可以利用緩沖技術(shù)更高效的從字符輸入流中讀取字符數(shù)據(jù)。當(dāng)程序需要從一個(gè)文件中讀取數(shù)據(jù)時(shí),我們可以通過FileReader類創(chuàng)建的流讀取字符數(shù)據(jù),但讀取的效率不

33、高,一次可以讀取一個(gè)或多個(gè)字符,如前面的例子所示。使用基于緩沖的BufferedReader類創(chuàng)建的流讀取數(shù)據(jù)時(shí),可以利用該類提供的String readLine()方法一次讀取一行字符。構(gòu)造方法 BufferedReader(Reader inputStream) 該方法創(chuàng)建一個(gè)默認(rèn)輸入緩沖區(qū)大小的輸入緩沖字符流。字符輸出緩沖流BufferedWriter BufferedWriter類是Writer類的子類是一個(gè)字符輸出緩沖流類,可以利用緩沖技術(shù)更高效的向一個(gè)字符輸出流中寫入字符數(shù)據(jù)。該類提供了newLine()方法,每次調(diào)用向輸出流寫入換行符,與BufferedReader的readLi

34、ne()方法相匹配。BufferedWriter類的構(gòu)造方法如下:BufferedWriter(Writer outputStream) 該方法創(chuàng)建一個(gè)默認(rèn)輸出緩沖區(qū)大小的輸出緩沖字符流。例:例:字符緩沖流的應(yīng)用(將ByteFileRead.java文件拷貝到CopyByteFileRead.doc文件中)import java.io.*;public class IOBufferedStream public static void main(String args) throws IOException try BufferedReader br=new BufferedReader(new FileReader(ByteFileRead.java);BufferedWriter bw=new BufferedWriter(new FileWriter(CopyByteFileRead.doc); String line=br.readLine(); while(line!=null) bw.write(line); bw.newLine(); System.out.println(line); line=br.readLine(); bw.close(); br.close(); System.out.println(你已成功將ByteFile

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論