资源描述
0,Java的基本输入与输出,1,本章目标,理解相关基本概念。使用键盘进行单个字符、字符串、数值类型数据的输入。,2,Java的基本输入与输出方式,字符界面方式(本章内容)图形界面方式(以后介绍),3,一、Java中流的概念,日常生活中的流可以被理解为一根“导管”。导管的特点:单向性。,日常生活中所说的流:,1、什么是流?“导管”中的流类似于Java语言中的IO流。Java语言中,流是程序在输入输出过程中流动的数据序列。流有两个端口:一端与数据源点(当输入数据时)或数据终点(当输出数据时)相连,另一端与程序相连。,4,2、流的示意图,当程序要把结果输送到数据终点时,必须在程序和数据终点之间连接建立输出流。,当程序要从数据源点获得数据时,必须在程序和数据源之间建立输入流。,5,3、流的分类,根据流中数据传输的方向,将流分为:输入流:从键盘或磁盘文件流向程序的数据流,为程序提供输入信息。输出流:从程序流向显示器、打印机、磁盘文件的数据流,实现程序的输出功能。根据流中的数据格式,将流分为:字符流:以字符为传输单位;字节流:以字节为传输单位;,6,二、Java中提供的IO流,为了便于流的处理,Java在Java.io包中提供了丰富的类,每个类代表了一种特定的输入或输出流。利用输入流类可以建立输入流对象,利用输入数据流类提供的方法可以从输入设备将数据读入到程序中;利用输出流类可以建立输出流对象,利用输出数据流类提供的方法可以将程序产生的数据写到输出设备上;,7,1、Java中流类的总图如下:,8,2、字节流类,字节流以字节方式从流中读取或向流中写入数据,字节流类有:输入流类InputStream及其子类输出流类OutputStream及其子类InputStream和OutputStream分别是所有字节输入类和字节输出类流的祖先。InputStream和OutputStream为抽象类,不能用来直接创建流,只能用它们的子类创建字节输入或字节输出流。,9,字节流类的继承图:,10,字节流类中的几个重要方法,read()方法:InputStream类中的静态方法,用于从输入字节流中读出一个字节。print()方法:OutputStream类的子类FilterOutputStream的子类PrintStream的方法。用于输出不同类型的数据信息。println()方法:和print()方法唯一的区别是println()方法输出对象之后附带一个回车,下一次将在下一行中输出。,11,三、标准输入/输出,标准输入/输出;指面向标准输入设备和标准输出设备的输入/输出。标准输入设备:现阶段默认为键盘。标准输出设备:现阶段默认为显示器。,12,1、System类,System类是Java语言中一个功能强大、非常有用的类,它提供了标准输入与输出、运行时的系统信息等重要工具,是属于java.lang包的一个终止类。System类不能创建对象,即System类的属性和方法都是静态的,引用时要以System为前缀。in、out、err为System类的三个静态属性。,13,Java系统内预定义的标准IO流定义格式,publicfinalclassjava.lang.Systemextendsjava.lang.objectpublicstaticInputStreamin;publicstaticPrintStreamout;publicstaticPrintStreamerr;,14,System.in:标准输入流,默认指键盘,用于程序输入,通常读取用户从键盘输入的信息。System.out:标准输出流,默认指屏幕,用于程序输出,通常向用户显示信息。System.err:标准错误流,默认指屏幕,用于向用户显示出错信息。,Java系统预先定义的标准IO流,15,2标准输出流,标准输出流使用System类的静态属性out的print()和println()方法提供向屏幕输出不同类型数据的功能。实现格式如下:System.out.print()System.out.println()注意:out为OutputStream类的子类FilterOutputStream的子类PrintStream创建的对象,而print()和println()方法为PrintStream类的成员方法。,16,3标准输入流,标准输入流使用System类的静态属性in的read()方法从键盘读取一个字节到程序。实现格式如下:System.in.read()功能:执行该方法时,等待用户击键,当击一次键后,该方法从输入流中读出一个字节(所键入字符的ASCII码),然后将该字符的ASCII码换成Unicode编码,返回值为Unicode编码的int型数。按回车输入结束。,17,说明:,in是System类的一个属性,代表系统标准输入(键盘)。In属性是InputStream类的对象,InputStream类中的方法read()用于接受从标准输入设备输入的字符。执行System.in.read()会得到输入字符的unicode编码值。在java中,当进行键盘输入时要处理可能发生的异常现象,因此程序设计时使用的System.in.read()语句必须包含在try语句块中,而且try语句块的后面应该有一个可以接收IOException异常的catch语句块。,18,举例1,编写程序:从键盘输入一个字符,将字符的编码值和字符本身输出到屏幕上。提示:注意read()方法的返回类型。注意read()方法只能读取一个字符。注意read()方法要进行异常处理。,19,importjava.io.*;classInput_Exp1publicstaticvoidmain(Stringargs)intn=-1;charch=;System.out.println(请输入一个字符:);,20,tryn=System.in.read();ch=(char)n;System.out.println(“输入字符的unicode编码值为:+n);System.out.println(输入的字符为+ch);catch(IOExceptione)System.out.println(输入的不是字符,输入有误!);,21,举例2,编写程序:从键盘输入一个0到9的数字,将数字字符的编码值和字符本身输出到屏幕上,如果输入的不是0到9的数字,则给出出错提示信息。提示:注意read()方法的使用。需要人工抛出异常。,22,importjava.io.*;classInput_Exp2publicstaticvoidmain(Stringargs)intn=-1;charch=;booleanf=false;System.out.println(请输入一个数字:);,23,tryn=System.in.read();ch=(char)n;if(n57)thrownewIOException();System.out.println(输入数字的unicode编码值为:+n);System.out.println(输入的数字为+ch);,24,catch(IOExceptione)System.out.println(输入的+ch+不是数字,输入有误!);,25,四、InputStream和OutputStream,InputStream和OutputStream是所在字节输入输出类的根类。这两个类提供了一些流输入输出使用的最基本的方法。主要方法有:,26,read():从流中读入数据。skip():跳过流中若干字节数。available():返回流中可用字节数。mark():在流中标记一个位置。reset():返回标记过的位置。markSupported():是否支持标记和复位操作。close():关闭流。,1、InputStream类的主要方法,三种从流中读数据的方法:intread():从输入流当前位置读一个字节的数据并返回,没有读到数据时返回-1intread(byteb):读多个字节到数组中intread(byteb,intoff,intlen);,27,2、OutputStream类的方法,write(intb):将一个整数输出到流中。write(byteb):将数组中的数据输出到流中。write(byteb,intoff,intlen):将数组b中从off指定的位置开始len长度的数据输出到流中。flush():将缓冲区中的数据强制送出。close():关闭流。,28,五字符流类,使用字节流输入字符串较复杂,使用字符流处理字符串的输入,相对于字节流来讲,较为方便。Java字符流类主要用来读写Unicode字符。,29,主要字符流类及其子类,字符流类层次的顶层是Reader类和Writer类。Reader类:用来以字符方式从流中读取数据。其中包含了一套所有字符输入流都需要的方法,可以完成最基本的从字符输入流读取数据的功能。Reader类也是一个抽象类,实际应用中创建的对象是Reader类的某个子类的对象,通过对象与外设数据源相连。,30,Writer类:用来以字符方式向输出流中写入数据。其中包含了一套所有字符输出流都需要的方法,可以完成最基本的向字符输出流写入数据的功能。Writer类也是一个抽象类,实际应用中创建的对象是Writer类的某个子类的对象,通过对象与外设数据源相连。,31,Reader类和Writer类的常用子类:,Reader类:BufferedReader类:把字符流中的字符读入指定的缓冲区。CharArrayReader类:允许使用字符数组作为数据流。FilterReader类:允许读取过滤的的字符数据流。InputStreamReader类:读取字节数据并将其转化为字符。Writer类:BufferedWriter类:将数据缓冲区的字符写到输出流CharArrayWriter类:将字符数组缓冲区的字符写到输出流。FilterWriter类:将过滤的字符写到输出流。OutputStreamWriter类:将字符转化为字节写到输出流。,32,BufferedReader类:,该类可以对任何种类的输入流进行带缓冲区的封装以实现性能的改善。该类的构造函数以Reader所有子类对象为参数,将从数据源读取的多个数据可以先暂存放到缓冲区中,即将Unicode字符流包装(转换)成缓冲流,使输入速度更快。例如:BufferedReaderbufin=newBufferedReader(newInputStreamReader(System.in)该语句相当于用BufferedReader类创建了一个缓冲过滤流对象bufin。BufferedReader类的readline()方法每次从输入流中读取一行数据,返回一个字符串。例如:Stringsname=bufin.readline();该语句相当于从缓冲过滤流对象bufin中读取成批的数据,然后赋值给字符串变量sname。而不是从数据源中一个一个读取数据。,33,InputStreamReader类,该类是从字节流到字符流的桥梁。该类的构造函数以InputStream类(字节类)对象为参数,将字节流包装(转换)成Unicode字符流。例如:InputStreamReaderstdin=newInputStreamReader(System.in)该语句相当于用InputStreamReader类创建了一个将字节流转换成Unicode字符流的对象stdin。System.in是System类的属性,代表标准输入流,in又是InputStream类的对象,代表字节流。也就是说,将标准输入字节流转换成字符流。,34,为了提高读取效率,通常将InputStreamReader和BufferedReader封装在一起使用。例如:InputStreamReaderstdin=newInputStreamReader(System.in)BufferedReaderbufin=newBufferedReader(stdin)或BufferedReaderbufin=newBufferedReader(newInputStreamReader(System.in)该语句被执行后,将创建一个连接到键盘的BufferedReader,即bufin将是一个通过System.in连接到控制台的基于字符的流。,35,举例,从键盘输入一个或多个人的姓名、性别、职业,并显示。提示:先测试处理单个信息,然后再处理多个信息。,36,数值类型数据的输入,从键盘直接读入的多个数值会被看作多个字符,需要进行类型转换之后,才能看作是数值。Short、Integer、Long、Float、Double各类都提供了将字符串转换成整数、实数的方法。publicstaticintparseInt(Stringstr):Integer类提供的方法,将字符串str转变成int类型整数。例如:Stringch=“123”;intn=Integer.parseInt(ch);将字符串“123”转换成数值123。Short、Long、Float、Double各类对应的该方法名分别为:parseShort、parseLong、parseFloat、parseDouble。使用方法同parseInt,37,举例,编写一个简单的人员信息录入程序.要求从键盘输入人数,然后依次输入每个人的姓名、年龄、职称和月工资,最后将输入的人员信息全部显示在屏幕上。,38,作业:,1什么是流?流的分类?2InputStream,OutputStream,Reader和Writer类的功能有何异同?3从键盘输入一个数字(0-9),分别显示该数字本身和该数字对应的Unicode码值。(注意异常处理)4从键盘输入三个人的姓名和JAVA成绩,显示三个人的姓名和成绩,求出显示三个人中最高分的人的姓名和成绩,并求出三个人的JAVA平均分。,
展开阅读全文