java异常io.docx

上传人:夺命阿水 文档编号:1463446 上传时间:2024-06-29 格式:DOCX 页数:17 大小:35.70KB
返回 下载 相关 举报
java异常io.docx_第1页
第1页 / 共17页
java异常io.docx_第2页
第2页 / 共17页
java异常io.docx_第3页
第3页 / 共17页
java异常io.docx_第4页
第4页 / 共17页
java异常io.docx_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《java异常io.docx》由会员分享,可在线阅读,更多相关《java异常io.docx(17页珍藏版)》请在课桌文档上搜索。

1、java异样io第卜章异样处理一、什么是异样:程序编译和运行时发生的错误称为异样。处理发生的异样称为异样处理。主要侧重于程序运行时发生的错误。异样处理的目的是保证程序的正常运行。一个异样就是一个异样类(对象)。案例一:packagecom.nkzy;importjava.util.Scanner:publicclassTestExceptionpublicstaticvoidmain(Stringargs)Scannerinput=newScanner(Systen).in);intnunl,nun2,resu111,result2;System,out.PrintIn(请输入第一个操作数:)

2、;numl=input,nextlntO;System,out.Println(请输入其次个操作数:);num2=input,nextlnt();result1=nunl/num2;System,out.println(numl/num2=+resultl);result2=nml*num2;System.out.printIn(numl*num2=+result2);当我们输入num2为。时,出现异样状况如卜丁当程序发生异样时,程序不能正常执行。异样处理:packagecom.nkzy;importjava.util.Scanner:publicClassTestExceptionpubli

3、cstaticvoidmain(Stringargs)Scannerinput=newScanner(System,in);intnuml,num2,result!,result2:System,out.PrintIn(请输入第一个操作数:);numl=input,nextlnt();System,out.PrintIn(请输入其次个操作数:);num2=input,nextIntO;tryresult1=numl/num2;System.out.pri11tln(11u11l/num2=+resultl);catch(ArithmeticExceptione)System,out.Print

4、In(发生异样);System.out.println(e.getMessage();result2=numl*num2;System,out.printIn(numl*num2=+result2);运行效果如下:当发生异样时,程序仍旧正常运行。二、异样的体系结构1、异样的类型Error类用于定义不希望程序能从其复原过来的灾难性故障。所以程序员不须要捕获它们。如:线程停止、虚拟机错误等。ObjectThrowableErrorThreadDeathAWTErroeExceptionSQI.ExccptionClassNotFountExccptionRuntimeException对于从Exc

5、eption派生出来的全部其他类,是我们重点学习的内容。运行时异样可以处理,也可以不处理;编译时异样必需进行处理。三、异样处理1、try/catch及try/catch/finallytry块:可能发生异样的代码。CatCh块:处理异样的代码,一个try后面可以跟多个CatCh,但是大类别的的异样必需在小类别异样的后面,同级别的没有依次。finalIy块:与try块一起运用,无论是否出现,finally块都将运行。案例:packagecom.nkzy:importjava.util.Scanner:publicclassTestExceptionpublicstaticvoidmain(Str

6、ingargs)ExceptionSQ1.ExceptionClassNotFoundExceptionRuntiineException编译时异样NUIIPOintEXCePIiOnNumberFormatExceptionTry块finallyfinallyCatch块没有异样异样intnuml,num2,result1,result2;numl10:num2=0;System,out.printIn(try块前代码);tryresult1=numl/num2;System.out.println(resultl);catch(Nu11PoiFiterExceptione)System.o

7、ut.Println(发生空指针异样);System,out.printIn(e.getMessageO);catch(ArithmeticExceptione)System.out.PrinIIn(发生数学异样);System,out.println(e.getMessage():catch(RuntimeExceptione)System.out.PrintJn(发生运行时异样):System,out.println(e.getMessage():finallySystem.out.PrintJn(打扫战场);System,out.printin(try-catch-finalIy块后代码

8、):运行效果:2、异样抛出案例:packagecom.nkzy;pub)icclassTeacherpublicvoidshangke()throwsException!trycatch(Exceptione)System.out.PrintIn(老师上课);System,out.PrintIn(学生打架);System,out.Println(自己处理部分);throwe;packagecom.nkzy;publicclassHeadOfTeachingpublicvoidteaching()throwsExceptionTeachert=newTeacherO;tryt.shangkeO;

9、catch(Exceptione)System,out.Println(自己处理部分);throwe;packagecom.nkzy;publicclassMasterpublicstaticvoidmain(Stringargs)HeadOfTeachingh=newHeadOfTeaching();tryh.teaching();catch(Exceptione)System,out.PrintIn(校长必需处理,不能再抛);e.PrintStackTraceO;)(1)throw出现在方法体内,表示抛出某个异样,throws属于方法声明,在参数列表的后面,表示这个方法可能抛出的异样,假如

10、是编译时异样,调用者必需处理,并且可以声明多个异样。(2)编译时异样,调用者必需处事理分三种方法:全部处理、全部抛出、部分处理部分抛出。3、自定义异样(1)希望当一个标准异样出现时,添加一些信息,可能通过抛出你自己的异样来做到这一点。(2)代码中可以有一些出错条件,以保证区分出某种特定的异样类。(3)虽然可以从任何的标准异样派生出臼己的类,但最好的策略是从Exception派生O案例:packagecom.nkzy;pub!icclassZhaojingyuExccptionextendsException(publicZhaojiDgyuExceptionOsuperO;publicZhao

11、jingyuException(Stringmessage)super(HeadOfTeaching=+message);packagecom.nkzy;publicclassTeacherpublicvoidshangkeOthrowsZhaojIngyuExceptionif(true)thrownewZhaojingyuExccption(学生上课打架!);packagecom.nkzy:publicclassHeadOfTeachingpublicvoidteaching()throwsZhaojingyuExccptionTeachert=newTeacherO;t.shangkeO

12、:packagecom.nkzy:PublicclassMasterpublicstaticvoidmain(Stringargs)HeadOfTeachingh=newHeadOfTeachingO;tryh.teaching();catch(ZhaojiHgyuExceptione)/TODOuto-generatedcatchblocke.PrintStackTraceO:第十二章节TO流*、Java流式输入/输出原理在Java程序中,对于数据的输入/输出操作以流(stream)方式进行,JDK供应了各种各样的流类,用以获得不同种类的数据;程序中通过标准的方法输入或输出数据。程序文件Oo

13、lOl程序文件OolOI程序Oolol网络连接程序O(HOl程序001程序文件hell。二、输入/输出流的分类1、java,i。包中定义了多个流类型(类或抽象类)来实现输入/输出功能:可以从不同的角度对其进行分类:(1)按数据流的方向不同可以分为输入流和输出流;(2)按处理数据单位不同可以分为字节流和字符流;(3)根据功能不同可以分节点流和处理流。2、JDK所供应的全部流类型位于包java,io内都分别继承自以下四种抽象流类型。字节流输入流InputStream输出流OUtPUtStrealn3、节点流和处理流(1)节点流为可以从一个特定的数据源(节点)读写数据(如:文件,内存)。字符流Rea

14、derWriter(2)处理流是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序供应更为强大的读写功能。三、InputStream1、InputStream:继承自InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。数据源程序数据源程序数据源程序节点流2、InputStrcam的基本方法(1)intread()throwsIOException读取一个字节并以整数的形式返回(0-255),假如返回T已到输入流的末尾。(2)intread(bytebuffer)throwsIOException读取一系列字节并存储到

15、一个数组buffer,返回实际读取的字节数,假如读取前已到输入流的末尾返回T.(3)intread(bytebuffer,intoffset,intlength)throwsIOExccption读取length个字节,并存储到一个字节数组buffer,从OffSet位置起先,返回实际读取的字节数,假如读取前已到输入流的末尾返回-1.(4)VoidcloseOthrowsIOException关闭流释放内存资源(5)longskip(longn)throwsIOException跳过n个字节不读,返回实际跳过的字节数。四、OutputStrcain1、OutputStream:继承臼Outpu

16、tStream的流是用于程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。2、OutputStream的基本方法(1)voidwrite(intb)throwsIOException(2)voidwrite(byteb)throwsIOException(3)voidwrite(byteb,intoff,intIen)throwsIOException(4)voidcloseOthrowsIOExccption(5)voidflushOthrowsIOException将输出流中缓冲的数据全部写出到目的地。良好的编程方式应当是先调用flush,再调用close(

17、).五、Reader1、Reader:继承来HReader的流都是用于向程序中输入数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流。2、Reader的基本方法(1)intreadOthrowsIOException读取一个字符并以整数的形式返回(0-255),假如返回T已到输入流的末尾。(2)intread(charbuffer)throwsIOException读取一系列字符并存储到一个数组buffer,返回实际读取的字符数,假如读取前已到输入流的末尾返回T.(3)intread(charebuffer,intoffset,intlength)throwsIOExce

18、ption读取length个字符,并存储到一个字符数组buffer,从OffSel位置起先,返回实际读取的字符数,假如读取前已到输入流的末尾返回T.(4)voidclose()throwsIOException关闭流释放内存资源(5)longskip(longn)throwsIOException六、Writer1、Writer:继承来FlWriter的流都是用于向程序中输出数据,且数据的单位为字符(16bit):下图中深色为节点流,浅色为处理流。2、基本方法:(1)voidwrite(i11tb)throwsIOException(2)voidwrite(charb)throwsIOExce

19、ption(3)voidwrite(charb,intoff,intIen)throwsIOExccption(4)voidclose0throwsIOException(5)voidflushOthrowsIOException将输出流中缓冲的数据全部写出到目的地。良好的编程方式应当是先调用flush,再调用close().七、节点流1、节点流类型案例1:importjava.io.*;publicclassTestFiIeInputStreampublicstaticvoidmain(Stringargs)(intb=0;FileInputStreamin=null;tryin=newFi

20、leInputStream(d:WshareWjavaWioWTestFiIeInputStream.java);catch(FileNotFoundExceptione)System.out.println(找不到指定文件);System,exit(-l);trylongnum=0:while(b=in.read()!=-l)System.out.print(char)b);num+;in.close();System.out.printin();SySten.out.println(共读取J+num个字节);catch(IOExceptionel)System.out.println(文件

21、读取错误);System,exit(-l);)案例2:importjava,io.*;publicclassTestFiIeOutputStreampublicstaticvoidmain(Stringargs)(intb=0:FileInputStreainin=null:FiIeOutputStreaniout=null;tryin=newFileTnputStream(dzsharejavaHelIoWorld.java);out=newFi1eOutputStream(d:/share/java/ioHW.java):while(b=in.read()!=-l)out.write(b)

22、:in.closeO:out.close();catch(FileNotFoundExccptione2)SyStem.out.println(找不到指定文件);System,exit(-l):catch(IOExceptionel)System.out.println(文件复制错误);System,exit(-l);SySteln.out.println(文件已复制);案例3:importjava.io.*:publicclassTestFileReaderpublicstaticvoidmain(Stringargs)FiIeRcadcrfr=null;intc=O;tryfr=newFi

23、1eReader(d:WshareWjavaWioWTestFiIcReadcr.java);intIn=O:while(c=fr.readO)I=-1)/charch=(char)fr.read();System,out.print(char)c):/if(+In=100)System,out.pri11tl11();In=O;fr.closeO:catch(FileNotFoUndEXCePtione)SyStem.out.println(找不到指定文件);catch(IOExceptione)SyStem.out.printin(文件读取错误);案例4:importjava.io.*:p

24、ublicclassTestFileWriterpublicstaticvoidmain(Stringargs)FilcWriterfw=null:tryfw=newFiIeWriter(tl:bakunicode.dat);for(intc=0;c=50000;c+)fw.write(c);fw.closeO:catch(IOExceptionel)el.PrintStackTraceO;System.out.PrintIn(文件写入错误);System.exit(-l);八、处理流类型(1)缓冲流:缓冲流要套接在相应的节点流之上,对读写的数据供应了缓冲的功能,提高了读写的效率,同时增加了一

25、些新的功能。(2)JDK供应了四种缓冲流,其常用的构造方法为:案例1:importjava.io.*:publicclassTestBufferStreaiiilpublicstaticvoidmain(Stringargs)tryFileInputStreainfis=newFileInputStream(d:sharejavaHe1IoWorld.java);BufferedInputStreainbis=new0;BufferedInputStreani(fis);intc=System,out.println(bis.readO);System.out.println(bis.read

26、();bis.Diark(100);for(inti=Oji=IO(c=bis.readO)!=-l;i+)System.out.print(char)c+);System,out.printInO:bis.resetO;for(inti=0;i=10(c=bis.readO)!=-l:i+)System,out.print(char)c+);bis.close();catch(IOExceptione)e.PrintStackTraceO:案例2:importjava.io.*;publicclassTestBufferStream2publicstaticvoidmain(Stringar

27、gs)tryBufferedWriterhw=newBufferedWriter(newFiIeWriter(d:sharejavadat2.txt):BuffercdRcaderbr=newBufferedReader(newFi1eReader(d:sharejavadat2.txt);Strings=null;for(inti=l;i=100;i+)String.valuef(Math,randomO);bw.write(三);bw.ncw1.ine();hw.flush():while(s=br.read1.ine()!=null)(System,out.println(s);bw.c

28、loseO;br.closeO;catch(IOExceptione)e.PrintStackTraceO;九、转换流1、InputSlreamReader和OutputStreamWriter用于字节数据到字符数据之间的转换,InPUtStreamReader须要和InPUtStream套接,OutputStreamWriter须要和OUtPUtStream套接:转换流在构造时可以指定其编码集合,例如:InputSlreaniRcaderisr=ncwInputStreamReader(System,in,IS08859_l):案例1:importjava.io.*;publicclassT

29、estTransFormlpublicstaticvoidmain(Stringargs)tryOutputStreaniWriterOSW=newOutputStreamWriter(newFiIeOutputStream(d:bakchar.txt);osw.write(mircosoftibmsunapplehp);System,out.printin(osw.getEncoding();osw.close():osw=newOutputStreainWriter(newFiIeOutputStreani(d:bakchar.txt,true),IS08859.1);/Iatin-Ios

30、w.write(mircosoftibmsunapp1ehp);System,out.println(osw.getEncoding();osw.closeO;catch(IOExceptione)e.PrintStackTraceO;案例2:importjava.io.*;publicclassTestTransForm2publicstaticvoidmain(Stringargs)InputStreamReaderisr=newInputStreamRcader(System,in);BuffercdRcadcrbr=newBufferedReaderdsr);Strings=null;

31、trys=br.read1.ine();while(s!=null)if(s.equalsIgnoreCase(exit)break:System.out.printin(s.toUpperCase();s=br.read1.ine();br.close();catch(IOExceptione)e.PrintStackTraceO;/堵塞十、数据流(把一个long数据存入文件中应当如何处理?)和ByteArrayOutputStream1、DataInputStreani和DataOutputStreain分别继承jInputStream和OUtPUtStreanb它属于处理流,须要分别套接

32、在InpulSlream和OUlPUIStream类型的节点流上:DatalnputStream和OUlPUtStreanl供应了可以存取与机器无关的JaVa原始类型数据(如:int,double等)的方法。2、DataInputStream和DataOutputStreani的构造方法为:DatalnputStreamdnputStreamin);DataOutputStream(OutputStreamOUl);案例:publicBytcArrayOutputStreamnewByterraVOutputStreamO;newtrydos.WriteDouble(Math,random()

33、;importjava.io.*:publicclassTestDataStreamstaticvoidmain(Stringargs)baos=DatautputStreamdos=DataOutputStream(baos);dos.writeBoolean(true);ByteArrayInputStreambais=newByteArrayInputSlream(baos.loByteArray();System,out.printin(bais.availableO):DataInputStreamdis=newDataInputStream(bais):System,out.pri

34、ntln(dis.readDouble();System.out.printin(dis.readBoolean();dos.close():dis.close();catch(IOExceptione)e.PrintStackTraceO;十一、Print流(只有输出)1、PrintWriter和printStream都属于输出流,分别针对于字符和字节。2、PrintWriter和printStream的输出操作不会抛出异样,用户通过检测错误状态获得错误信息。3、PrintWriter和printStream有自动flush功能。4、构造函数案例1:importjava.io.*:publi

35、cclassTestPrintStreamlpublicstaticvoidmain(Stri11gargs)PrintStreamps=null;tryFileOutputStreamfos=newFilcOutputStream(d:baklog.dat);ps=newPrintStream(fos);catch(IOExceptione)e.PrintStackTraceO;if(ps!=null)System,setut(ps):intIn=0:for(charc=0;c=60000;c+)(System.out.print(c+):if(In+=100)System,out.prin

36、tln();In=0;案例2:importjava.io.*:publicclassTestPrintStream2publicstaticvoidmain(Stringargs)Stringfilename=args0;if(fiIename!=nu11)1ist(fiIename,System,out):publicstaticvoidlist(Stringf,PrintStreamfs)tryBufferedReaderbr=newBufferedReader(newFiIeReader(f);StringS=null;while(s=br.read1.i11e()!=null)fs.p

37、rintln(三);br.closeO;catch(IOExceptione)fs.printin(无法读取文件);案例3:importjava.util.*:importjava.io.*:publicclassTestPrintStreamSpublicstaticVOidmain(Stringargs)BufferedReaderbr=newnewtryFileWriterfwFileWriterStrings=null:BufferedReader(InputStreamReader(System,in);=new(d:baklogfile.log,true);/1.og4JPrint

38、Writerlog=newPrintWriter(fw);whiIe(s=br.read1.ine()!=null)if(s.equalSlgnoreCase(exit)break;System,out.println(s.toUpperCase():log.println():log.println(s.toUpperCaseO);log.flush();log.printIn(=+ncwDateO+=);log.flushO;log.closeO;catch(IOExceptione)e.PrintStackTraceO;十二、Object流1、干脆将Object写入或读出案例1:impo

39、rtjava.io.*;publicclassTestObjectIOpublicstaticvoidmain(Stringargs)throwsExceptionTt=newT();t.k=8;FileOutputStreamfos=newFi1eOutputStream(d:/share/java/iotestobjectio.dat);ObJectOutputStrcamoos=newObjeCIoUIPUIStrCam(fos);oos.WriteObject(t):oos.flush();oos.close();FiIeInputStreamfis=newFiIeInputStrea

40、m(d:/share/java/io/testobjectio.dat);ObjectInputStreaniois=newObjectInputStream(fis);TtReaded=(T)ois.readbjectO;System.out.printin(tReadcd.i+tReaded.j+tReaded.d+tReaded.k);classTimplementsSerializablei11ti=10;intj=9:doubled=2.3;transientintk=15;序列化时不用考虑第十二章网络编程Socket两个Java应用程序可通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个SocketeSocket通常用来实现client-server连接。Java,net包中定义的两个类Socket和ServerSocket,分别用来实现双向连接的client和SerVer端。建立连接时所须要的寻址信息为远程计算机的IP地址和端口号。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号