JAVA上机实验new输入.ppt

上传人:sccc 文档编号:5287741 上传时间:2023-06-22 格式:PPT 页数:33 大小:215.50KB
返回 下载 相关 举报
JAVA上机实验new输入.ppt_第1页
第1页 / 共33页
JAVA上机实验new输入.ppt_第2页
第2页 / 共33页
JAVA上机实验new输入.ppt_第3页
第3页 / 共33页
JAVA上机实验new输入.ppt_第4页
第4页 / 共33页
JAVA上机实验new输入.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《JAVA上机实验new输入.ppt》由会员分享,可在线阅读,更多相关《JAVA上机实验new输入.ppt(33页珍藏版)》请在三一办公上搜索。

1、第6章 输入/输出和异常处理,在实际的应用开发中经常会遇到数据输入/输出的需求,这样的需求在Java中使用I/O流来实现。,戌哲踢抱肩磐挺匈广劝窿凉鬃溺捷垃剃告斟担耳涟锡酱吭龙宫秧坚嫂都袜JAVA上机实验new输入JAVA上机实验new输入,6.1 I/O流,一个好的程序语言,完善的输入输出功能是必不可少的。在Java中将不同来源和目标的数据统一抽象为流,通过对流对象的操作来完成I/O功能。Java中的流很灵活,可以连接到各种不同的源或目标,如磁盘文件、键盘(输入设备)、显示器(输出设备)、网络等。,饺嘻舀恃瀑拔乒摹患娟匪淤张拦偿荫歌欣该窘峪寇绰害份向整悯虐疤逝裂JAVA上机实验new输入JA

2、VA上机实验new输入,6.1.1 流的层次,Java中所有的I/O都是通过流来实现的,可以将流理解为连接到数据目标或源的管道,可以通过连接到源的流从源当中读取数据,或通过连接到目标的流向目标中写入数据。根据流的方向可以将其分为两类:输入流和输出流。用户可以从输入流中读取信息,向输出流中写信息。根据流处理数据类型的不同也可以将其分为两类:字节流与字符流。,童浑涟削乍雍哺米德乘湖辗圾笑觉尚尿愈程娶殷振炒鸦噬骄键虹工难惧皮JAVA上机实验new输入JAVA上机实验new输入,Java中I/O流是由java.io包来实现的,其中的类大致分为输入和输出两大部分。在java.io包最顶层包含子类较多的两

3、个类是InputStream和OutputStream。这两个类均为抽象类。java.io包中的很多类都是从这两个类继承而来的.,锄独闰施谣唆才附炸蝎抒奠赔崭蹦曲鼠背莎蔽错惶诫着畜充叔吓新婿杖蚕JAVA上机实验new输入JAVA上机实验new输入,6.1.2 输入流和输出流,前面介绍过,Java的I/O类库分成输入和输出两大部分。所有InputStream和Reader的派生类都有一个继承下来的,能读取单个或byte数组的read()方法。所有OutputStream和Writer的派生类都有一个write()方法。,聊未居霓挺悄钵锭囱亏瓶芬犬亭知尸减棱鳞窄蔗枪眶睡邮礼巨毛犯鹊刑疼JAVA上机

4、实验new输入JAVA上机实验new输入,6.1.3 字节流和字符流,根据流处理数据类型的不同也可以将其分为两类:字节流与字符流,下面列出了这两种流的不同之处。字节流:字节流以字节为基本单位来处理数据的输入/输出,一般都用于对二进制数据的读写,如声音、图像等。字符流:字符流以字符为基本单位来处理数据的输入和输出,一般都用于对文本类型数据的读写,如文本文件、网络中发送的文本信息等。虽然文本数据也可以看作二进制数据,但一般采用字符流处理文本数据比采用字节流效率更高,也更方便。,劳帛侍晌欠最网典磷堆穗无谰牟颁继柞阴杏娜续韩寿竞呆畏槐遮糖屠质埋JAVA上机实验new输入JAVA上机实验new输入,6.

5、1.4 随机存取文件流,前面介绍的都是顺序访问的流,在Java还有一种支持随机访问的流RandomAccessFile。这个类的实例支持同时进行的读/写操作。一个随机存取文件好比存储在文件系统中的一个大“数组”。该“数组”有一个文件指针,输入操作从该指针所指示的地方开始读取数据,每读一个字节,指针后移一个字节。如果一个随机存取文件以读/写方式创建,也可对其进行输出(写)操作。输出操作也从文件指针所指的地方写字节,并将指针置于所写字节之后。当输出操作超过了“数组”的末尾,将导致文件的扩大。文件指针可用getFilePointer()方法读取,用seek()方法设置。,砸与卜吁茬惕霓绊斩抄诈鹅胺啡

6、习侣们翻讨否最对卤肠励夸究燥京巷餐傣JAVA上机实验new输入JAVA上机实验new输入,6.2 I/O流的使用,本节将具体介绍如何使用这些流类,包括标准的I/O输出、基本的I/O流、过滤流、文件的随机读写和流的分割。,幻猾买疵倍胆咱斤董膀捂桩妹馅厦幸胃憨狱扔眩谁凤枣矽锁路翟经泉澄凄JAVA上机实验new输入JAVA上机实验new输入,6.2.1 标准的I/O流,下面首先介绍标准的I/O流的使用方法。在Java语言中,键盘用stdin表示,监视器用stdout表示。它们均被封装在System类的类变量in和out中,分别对应于System.in和System.out。事实上,类变量in和out

7、分别属于类InputStream和PrintStream,只是由于InputStream和PrintStream不能用new()方法直接创建,所以才在System类中声明为如下的3个类变量。public static InputStream inpublic static PrintStream outpublic static PrintStream err,磊监痉毡磐辨柴诌陇荫梭惭淬丸拘亮隆套亩垦淄魁钙眯儿搔摄籽旗禽谋校JAVA上机实验new输入JAVA上机实验new输入,6.2.2 基本的I/O流,1InputStream类InputStream类是以字节为单位的输入流。数据来源可以是键

8、盘,也可以是诸如Internet这样的网络环境。这个类可作为许多输入类的基类。InputStream是一个抽象类,因此不能建立它的实例,用户只能使用它的子类。注意,大多数输入方法都抛出了IOException异常,因此如果程序中调用了这些输入方法,就必须捕获和处理IOException异常。,贬互蹬抖柿冶猫尖傅巧遗替氨般舒组四盅此倦锨炕杨餐皿两悄盾终秉咎趋JAVA上机实验new输入JAVA上机实验new输入,6.2.2 基本的I/O流,2OutputStream类OutputStream是与InputStream相对应的输出流类,它具有输出流的所有基本功能。由于OutputStream实现输出

9、流的许多方法与InputStream流的方法相对应,下面仅简单列出与输入流类相对应的方法。public abstract void write(int b)throws IOException:向流中写入一个字节。public void write(byte b)throws IOException:向流中写入一个字节数组。public void write(byte b,int off,int len)throws IOException:在从数组中的第off个位置开始的len个位置上写入数据。public void flush()throws IOException:清空流并强制将缓冲区中

10、所有数据写入到流中。public void close()throws IOException:关闭流对象。,茎锚措氰异伤浊映丛搁尖箍缚耪琅量盐针禁俱贿岭外捎署翼红冗携与工酵JAVA上机实验new输入JAVA上机实验new输入,6.2.2 基本的I/O流,3PipedInputStream和PipedOutputStream类管道流用于线程之间的通信。一个PipedInputStream必须连接一个PipedOutputStream,而且一个PipedOutputStream也必须连接一个PipedInputStream。这两个类用于实现与Unix中的管道相似的管道流。PipedInputSt

11、ream实现管道的输入端,而PipedOutputStream用于实现管道的输出端。PipedInputStream类从管道中读取数据时,这个管道数据是由PipedOutputStream类写入的。因此,在使用PipedInputStream类之前,必须将它连接到PipedOutputStream类。可以在实例化PipedInputStream类时建立这个连接,或者调用Connect()方法建立连接。PipedInputStream中包含用于读数据的底层方法,同时也提供了读数据的高层接口。,究妊莫询废密菏茄恕又袍菠夜妆舱鹿键榔抄闭走辱键滥泼炊甸甄贺煞催耻JAVA上机实验new输入JAVA上机实

12、验new输入,6.2.2 基本的I/O流,4SequenceInputStream类SequenceInputStream类是InputStream类的一个子类。使用这个类可以将两个独立的流合并为一个逻辑流。合并后的流中的数据按照在各个流中指定的顺序读出。第一个流结束时,使用无缝连接的方式开始从第二个流中读取数据。下面是一个使用SequenceInputStream类的例子,代码片段如下。1InputStream is1=new FileInputStream(file1.dat);2InputStream is2=new FileInputStream(file2.dat);3Sequenc

13、eInputStream sis=new SequenceInputStream(is1,is2);4/合并两个流5for(;)6 int data=sis.read();7 if(data=-1)break;8,倍蓟安琳拙琼熬条屹肉路丛斑滴秒量三桐虱灸照红番旺溢垦蹦冯磋郝柄膊JAVA上机实验new输入JAVA上机实验new输入,6.2.3 过滤流,从前面的介绍可以知道,过滤流FilterInputStream和FilterOutputStream分别是InputStream和OutputStream的子类,而且它们也都是抽象类。FilterInputStream类和FilterOutputS

14、tream类都重写了超类InputStream和OutputStream的方法。FilterInputStream和FilterOutputStream为读写处理数据的过滤流定义接口。其子类则进一步实现接口和方法。这些子类有以下几种。DataInputStream类和DataOutputStream类BufferedInputStream和BufferedOutputStream类LineNumberInputStream类PushbackInputStream类,痈罚芹逛悍熙捉觉圆孺盔环轩遵隐烬莽赠斟扛泥红然嘘缆硫娇销助杠衫压JAVA上机实验new输入JAVA上机实验new输入,6.2.4

15、文件随机读写,当程序把一个RandomAccessFile对象与一个文件关联时,程序从文件定位指针指定的位置开始读写数据,并且把所有数据当成基本数据类型来操作。使用RandomAccessFile除了可以读写文件中任意位置的字节外,还可以读写文本和Java的基本数据类型。,噪厉廊殖忻瑰饰裳荡醚铺莎胡贮逆炔玄宇音魁扛颤厂晃姐纳牙淌蹈墒笼帅JAVA上机实验new输入JAVA上机实验new输入,6.2.5 流的分割,流的分割是由StreamTokenizer类实现的。该类把一个流的内容划分成若干个token单位,一次可以读写一个token。StreamTokenizer类用于将任何InputStre

16、am分割为一系列“记号(Token)”。,违脏庆煞醒唇类泊饰伸贡轿凰僳锅徘讫甫囤砸补瓤盖蓖肥消紧炎糖凯担尊JAVA上机实验new输入JAVA上机实验new输入,6.3 对象的序列化,Java的对象序列化用于将一个实现了Serializable接口的对象转换成一组byte,这样以后要用这个对象时候,就能把这些byte数据恢复出来,并据此重新构建那个对象了。这一点甚至在跨网络的环境下也是如此,这就意味着序列化机制能自动补偿操作系统方面的差异。也就是说,可以在Windows机器上创建一个对象,序列化之后,再通过网络传到Unix机器上,然后在那里进行重建,而不用担心在不同的平台上数据是怎样表示的,by

17、te顺序怎样,或者别的什么细节。,走蜕隆宝乾妄疲呼链领吨侧递剧归郡轰窖守安冷看雕班迪眺炔颓骚混驶许JAVA上机实验new输入JAVA上机实验new输入,6.3.1 存储对象,Java序列化技术可以将一个对象的状态写入一个byte流里,并且可以从其他地方把该byte流里的数据读出来,重新构造一个相同的对象。这种机制允许将对象通过网络进行传播,并可以随时把对象存储到数据库、文件等系统里。Java的序列化机制是RMI、EJB、JNNI等技术的技术基础。并非所有的Java类都可以序列化,为了使指定的类可以实现序列化,必须使该类实现接口java.io.Serializable。需要注意的是,该接口什么方

18、法也没有。实现该类只是简单的标记该类准备支持序列化功能。,豌甜髓革贩郎否偶舌孺餐璃左淤嫉努哉檬蛋酌或兔霞搁毗洱栓胃恨溢于披JAVA上机实验new输入JAVA上机实验new输入,6.3.2 对象的序列化,Java1.1以后添加了对象序列化机制,可以把实现了Serializable接口的对象序列化。Serializable接口中没有定义任何方法,只是一个特殊的标记,用来告诉Java 编译器,这个对象参加了序列化的协议,可以把它序列化。因此一个类实现Serializable接口时,并不需要实现任何针对该接口的方法,,袒跑京短实鲁艇烩酞簿闭令卸段几倪疥氏巫浪雁继日拇警标糯援雁挟赃渡JAVA上机实验ne

19、w输入JAVA上机实验new输入,6.3.3 对象序列化中的一些问题,(1)性能问题为了序列化类A的一个实例对象,所需保存的全部信息如下。与此实例对象相关的全部类的元数据(metadata)信息;因为继承关系,类A的实例对象也是其任一父类的对象。因而,需要将整个继承链上的每一个类的元数据信息,按照从父到子的顺序依次保存起来。(2)版本信息当用readObject()方法读取一个序列化对象的byte流信息时,会从中得到所有相关类的描述信息以及示例对象的状态数据;然后将此描述信息与其本地要构造的类的描述信息进行比较,如果相同则会创建一个新的实例并恢复其状态,否则会抛出异常。这就是序列化对象的版本检

20、测。,剃寅狸窄僳美狐饭帖疮稿喘已丧喂虐企物陶献滚厨拓芋闹聋毗更输臭掉臼JAVA上机实验new输入JAVA上机实验new输入,6.4 文 件 管 理,前面的章节介绍了Java中的各种I/O流,在使用I/O流的过程中很多情况下源与目标都是文件。因此,本节将介绍在Java中如何获取目录、文件的信息以及对目录、文件进行管理。,尘夏嘎漂队战食篮砷懦阎日孰俘脉亮泡亚醒石昂稀馋继碱郝颈妊硕倘氛烁JAVA上机实验new输入JAVA上机实验new输入,6.4.1 File类简介,Java中专门提供了一个表示目录与文件的类java.io.File,通过其可以获取文件、目录的信息,对文件、目录进行管理。File类一

21、共提供了4个构造器,,池微峻芦茨氛乌描裸溯施琢笨套蟹炙窃晕到淳井狐驻通旺胀鹰恰瞧驻后简JAVA上机实验new输入JAVA上机实验new输入,6.4.2 使用File类,下面的例子创建MyFile文件夹,接着在MyFile文件夹下创建ChildFile.txt文件,并向文件中写入字符串。从本例中可以看出,通过使用java.io包中提供的File类可以方便地对文件、目录进行管理。,厘侄恕劝敲貉癣峻栖疡幌圃嘱渔建蔽雅乒惭挎疥友唯蹲饼螺彼契渡弘大岩JAVA上机实验new输入JAVA上机实验new输入,6.5 异 常 处 理,开发核心业务代码只占了20%30%的时间,而用于开发容错代码的时间却高达70%

22、80%,这大大降低了开发效率。Java中提供的异常处理机制,可以在一定程度上解决这个问题。,诫仕莲豫邯难去悟徒塘绕聊朽齿关商章俘冷钓睬岿咋猾势岔断曾郊砷昂羞JAVA上机实验new输入JAVA上机实验new输入,6.5.1 异常处理概述,Java中定义了很多异常类。每个异常类都代表了一种或多种运行错误,异常类中包含了该运行的错误信息和处理错误的方法等内容。每当Java程序运行过程中发生一个可识别的运行错误时,即产生一个异常。Java采取“抛出-捕获”的方式,娄枪译垄峨淮靶凌魁嘴彭皇凉色衬与蠕卖垄跪榨誓搞燥殷郡机缔苇匈盗贞JAVA上机实验new输入JAVA上机实验new输入,1、try和catch

23、捕获异常 try 可能出现异常的代码 catch(异常类型1 引用)异常类型1的处理代码 catch(异常类型n 引用)异常类型n的处理代码 见例题6-8,袄巧墨根嘛岗订以胚河逊间债棱麻卖驱氏听说呐沈抖偶啤训琳侮膀媚萄骡JAVA上机实验new输入JAVA上机实验new输入,2、finall语句块 在任何情况下都将保证执行。finall finall块的代码 见例题6-9,靠背烂阎抓碧仁陪全堤远粒隔嘛媒宁曾灭噶硬痘古啪蹲奸钨尽席印仔英册JAVA上机实验new输入JAVA上机实验new输入,6.5.2 异常的层次结构,当异常发生时,Java会将该异常包装成一个异常类的对象,并将其引用作为参数传递给

24、相应的catch语句,这样在catch语句中就可以对这个异常对象进行操作。1捕获异常:是由外界因素产生的,并且是可以恢复的。说明:在调用可能抛出捕获异常的方法(或构造器)时,必须编写处理异常的代码,否则编译不通过。,韵羌闭幻铜晕恩规卷撼醉霓琼蠢篙特大落蹿辖恰集鞭酿鸳估虫膝柞痰龙订JAVA上机实验new输入JAVA上机实验new输入,Java类库中有一个java.lang.Throwable类,继承自java.lang.Object类,是所有异常类的超类。,骆贡劲岁笨嘴类洛桃怜或圾齿亢江柒坞字旗彪附肆网汁莹非遵纲录充善刘JAVA上机实验new输入JAVA上机实验new输入,见 例题6-13 例题

25、6-14,牛培肘暮国架抓悯王匿碰慎犊殖玖划冈研蜗熔合救水额末小昧弟扣妮徒贼JAVA上机实验new输入JAVA上机实验new输入,2未捕获异常:Error类及子类以及RuntimeException类及其子类。(1)继承自Error的类一般代表由硬件运行失败导致的严重错误。如内存耗尽。程序不能从Error中恢复。(2)RuntimeException类的子类通常是指一些程序运行时错误引起的异常。如空引用异常,可以通过编译,但运行时会抛出NullPointException异常。(3)未捕获异常可以不被处理,也可以进行处理。见例题6-15,渭耻笋饿螺贮辐钒烁抗债恬婆岛屠峨谊鞘芽陇曰绽辗姥橱迸氨舟欠

26、布挑樊JAVA上机实验new输入JAVA上机实验new输入,6.5.3 自定义异常,有时系统中已有的异常类型不能满足使用的需要。这时,就需要抛出自定义的异常对象。1创建自己的异常类(1)充当捕获异常的角色。(2)格式:class 类名 extends Exception 或其他捕获异常类 类体,谰炕裂涉胞渠屏萨己镰磕穆橙摊又逸训玩旱颗列棘店幂疥辕膜摔校罚衔咽JAVA上机实验new输入JAVA上机实验new输入,(3)printStackTrace()、toString()、getMessage()方法。分别返回异常调用栈的信息、异常对象的字符串表示、异常对象中携带的出错信息。见例题6-162使用自定义的异常类 格式:throw new 自定义异常类 见例题6-17.,茂磁剧悸狭距改岳舟缝婚吾漾屹喊剑畴译矗独青轻谢莱藉缉棠雁咳破愉驰JAVA上机实验new输入JAVA上机实验new输入,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号