版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单元6
输入输出流与异常处理6.1异常处理程序设计
任务6.1用户登录界面异常任务描述在出货管理系统的登录界面需要输入用户名和密码,其中用户名只能由6-10位数字组成,密码只能是6位,任何不符合用户名或密码要求的都视为异常,并且要求捕获并处理该异常。使用自定义异常类型来完成对用户登录信息的验证功能,如图6-1所示。图6-1用户登录界面异常知识目标了解异常处理的作用。熟悉异常处理方式。熟悉自定义异常类。能力目标能熟练使用try-catch捕获异常。能自定义异常类,会使用throw抛出异常。能使用throws在方法中抛出异常。素养目标价值塑造和思想引领,积极乐观态度,常怀感恩之心。风险意识。任务6.1用户登录界面异常
相关知识生活中的突发状况
正常情况下,小王每日开车去上班,耗时大约30分钟。
但是,异常情况迟早要发生!堵车!or撞车!
异常概述程序中的异常案例---使用者输入错误
public
classHelloJava{
publicstaticvoidmain(String[]args){
System.out.print("请输入课程代号(1至3之间的数字):");Scanner
scanner
=
new
Scanner(System.in);int
courseCode
=
scanner.nextInt();
//
从键盘输入整数switch
(courseCode)
{
case
1:System.out.println("Python编程");
break;
case
2:System.out.println("Java编程");
break;
case
3:System.out.println("MySQL基础");
}}正常情况:
输入:2
输出:Java编程异常情况:
输入:B
程序中断运行!
异常概述什么是异常
异常就是在程序的运行过程中所发生的不正常或者无法处理的事件,它会中断正在运行的程序。在程序中,错误可能产生于程序员没有预料到的各种情况,或者超出程序员可控范围的环境,例如用户的坏数据、试图打开一个不存在的文件等。异常!程序运行程序中断运行
异常概述异常处理
一个异常是在程序执行期间发生的一个事件,它使正常的指令流中断。Java语言使用异常机制为程序提供错误处理的能力。
绕行或者等待请求交警解决堵车!
撞车!异常!程序运行程序继续运行对异常进行处理程序中预先想好了对付异常异常处理完毕程序继续运行
异常概述异常类
为了能够及时有效地处理程序中的运行错误,Java专门引入了异常类。
异常处理方式使用try..catch块捕获异常
try{有风险的程序}catch(异常类型){
对异常进行处理的代码段}try..catch后的代码段import
java.util.Scanner;public
class
MyException
{
public
static
void
main(String[]
rags)
{
System.out.print("请输入课程代号(1至3之间的数字):");Scanner
in
=
new
Scanner(System.in);try
{
int
courseCode
=
in.nextInt();
switch
(courseCode)
{
case
1:
System.out.println("Python编程");break;
case
2:
System.out.println("Java编程");
break;
case
3:
System.out.println("MySQL基础");
}
}
catch
(Exception
ex)
{
System.out.println("输入不为数字!");
}
System.out.println("欢迎提出建议!");
}}
异常处理方式使用多重catch块捕获多个异常
import
java.util.InputMismatchException;import
java.util.Scanner;public
class
MyException
{
public
static
void
main(String[]
rags)
{
Scanner
in
=
new
Scanner(System.in);
try{
System.out.print("请输入学生的总学时:");//总学时int
totalTime
=
in.nextInt();System.out.print("请输入学生的课程数目:");int
totalCourse
=
in.nextInt();//课程数目}}在安排catch语句的顺序时,首先应该捕获最特殊的异常,
然后再逐渐一般化,即先子类后父类。
System.out.println("S1各课程的平均学时为:"+
totalTime/totalCourse);}
catch
(InputMismatchException
e1)
{
System.out.println("输入不为数字!");}
catch
(ArithmeticException
e2)
{
System.out.println("课程数目不能为零!");}
catch
(Exception
e)
{
System.out.println("发生错误:"+e.getMessage());
异常处理方式使用finally块—善后处理机制
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。import
java.util.Scanner;public
class
MyException
{
public
static
void
main(String[]
rags)
{
System.out.print("请输入课程代号(1至3之间的数字):");Scanner
in
=
new
Scanner(System.in);try
{
int
courseCode
=
in.nextInt();
switch
(courseCode)
{
case
1:
System.out.println("Python编程");break;
case
2:
System.out.println("Java编程");
break;
case
3:
System.out.println("MySQL基础");
}
}
catch
(Exception
ex)
{
System.out.println("输入不为数字!");
} finally{
System.out.println("欢迎提出建议!");
}
}}throw
new
ArrayIndexOutOfBoundsException("\n我是个性化的异常信息:
\n数组下标越界"
);}catch(ArrayIndexOutOfBoundsExceptionex
){System.out.println(ex
);}l
Java程序在运行时,如果发生了一个可识别的错误,
则系统产生一个与该错误相对应的异常类的对象,这个过程称为抛出异常。l
使用throw关键字用于Exception类中的子类异常,更重要的用途是抛出用户自定义的异常。l
创建自定义异常时,须继承RuntimeException类或者Exception类。thrownew异常类名(异常信息)……使用throw抛出异常抛出异常的实例化对象try{
使用throws抛出异常
l
如果某个方法可能会产生异常,但不想在当前方法中处理这个异常,则可以使用throws关键字在方法中抛出异常。l
使用throws关键字常用于方法上,表示一个方法可能抛出的所有异常信息,当方法抛出多个异常时,
可修饰符返回类型方法名
(参数列表)throws异常类名列表{……方法体……}publicstaticparseInt(Strings
)
throws
NumberFormatExceptionl
例如:判断整数数据格式是否为合法的Integer.parseInt()方法就会抛出NumberFormatException异常(
Java
API文档中的方法原型)。用逗号分隔异常类型名。publicclass
MyExceptionextends
Exception{……}方法功能publicvoid
printStackTrace()在控制台打印异常调用栈的信息publicString
toString()返回该异常对象的字符串表示publicString
getMessage()返回异常对象中携带的出错信息l
自定义的异常继承自Exception或其他异常自定义异常类l
Exception被继承的常用方法自定义异常类MyException继承自
Exception示例:
自定义异常类使用throw抛出异常使用throws抛出异常自定义异常类的对象变量单元6
输入输出流与异常处理6.2输入输出流程序设计
任务6.2.1使用文件模板读取成品数据任务描述入库管理就是仓库管理员针对生产管理系统(MES)中的成品物料数据入库RFID自动出货管理系统的操作。成品数据以文件模板形式导出MES系统中的数据,此处的文件模板以文本文件为例,本单元任务就是将文件模板形式的数据写入RFID自动出货管理系统,如图6-2所示。在成品实物进入仓库时使用RFID读/写器读取LP号码信息,根据读取LP号码信息与文件模板中数据的LP号码信息判断是否一致,来确定该数据是否可以写入RFID自动出货管理系统。此处RFID读/写器读取LP号码信息功能可通过键盘来完成。图6-2使用文件模板读取成品数据
任务6.2.2使用对象序列保存出货清单任务描述出库管理就是成品从仓库发货到提货车辆的管理。根据计划出货需求,仓库管理员从RFID自动出货管理系统中选择需要出货的信息,生成出货清单,该出货清单要保留完整记录并且可追溯。对象的序列化主要有两种用途:一种是把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;另一种是在网络上传送对象的字节序列。本单元任务是使用对象序列保存出货清单,如图6.3所示。图6-3使用对象序列保存出货清单知识目标了解输入/输出流的定义与常用方法。理解File类的常用方法及其说明。熟悉文件输入/输出流的概念。熟悉缓冲输入/输出流的概念。熟悉数据输入/输出流的概念。能力目标能够使用File类。能够使用字节流和字符流。能够使用文件、缓冲输入/输出流。能够使用数据输入/输出流。能够使用输入输出流读取写入数据,解决实际问题。素养目标培养严于律己、宽以待人的处事原则。培养规范编程习惯,做事细心、严谨的工匠精神。任务6.2使用文件模板读取成品数据输入输出是应用程序与外部设备及其计算机进行数据交流的操作,如读写硬盘数据、向显示器输出数据、通过网络读取其他节点的数据。读取数据内存内存数据写入
相关知识输入输出流概述所谓流是同一台计算机或网络中不同计算机之间有序运动的数据序列。Java中数据输入输出是以使用流(Stream)的形式执行的,借助于输入输出类库java.io包中的类与接口实现的。输入流抽象类有两种:InputStream字节输入流和Reader字符输入流。输入流InputStream类的常用方法及说明方法返回值说明read()int从输入流中读取数据的下一个字节。返回0~255范围内的int字节值。如果已经到达流末尾而没有可用的字节,则返回-1read(byte[]b)int从输入流读入一定长度的字节,并以整数的形式返回字节数。mark(intreadlimit)void从输入流的当前位置放置一个标记,readlimit参数告知此输入流在标记位置失效之前允许读取的字节数reset()void将输入指针返回到当前所做的标记处skip(longn)long跳过输入流上的n个字节并返回实际跳过的字节数markSupported()boolean如果当前流支持mark()/reset()操作就返回Trueclose()void关闭输入流并释放与该流关联的所有系统资源Reader类的常用方法
Reader类的方法与InputStream类的方法类似。但是Reader类的read()方法的参数为char类型的数组。Reader类还提供了一个ready()方法,用来判断是否准备读取流,其返回值为boolean类型。输出流输出流是指从计算机流向外部设备的数据序列,用于写出数据,但是不能读取。输出流的作用是从程序外部向内部写入数据。输出流抽象类有两种:OutputStream字节输出流和Write字符输出流。输出流方法说明write(intb)将指定的字节写入此输出流write(byte[]b)将b个字节从指定的byte数组写入此输出流。write(byte[]b,intoff,intlen)将指定的byte数组中从偏移量off开始的len个字节写入此输出流。flush()彻底完成输出并清空缓冲区close()关闭输出流OutputStream类的常用方法及说明输出流Writer类的常用方法方法说明append(charc)将指定字符添加到此输出流append(CharSequencecsq)将指定字符序列添加到此输出流append(CharSequencecsq,intstart,intend)将指定字符序列的子序列添加到此Writer.Appendableclose()关闭输出流,但要先刷新它flush()刷新该输出流的缓冲write(char[]cbuf)写入字符数组write(char[]cbuf,intoff,intlen)写入字符数组的某一部分write(charc)写入单个字符write(Stringstr)写入字符串write(Stringstr,intoff,intlen)写入字符串的某一部分File类File类是java.io包中用来操作文件的类,通过调用File类中的方法,可实现创建、删除、重命名文件等功能。使用File类的对象可以获取文件的基本信息,如文件所在的目录、文件名、文件大小、文件的修改时间等。
使用File类的构造方法能够创建文件对象。构造方法说明publicFile(Stringpath)创建一个File对象,指向path所表示的文件或目录。publicFile(Filedir,Stringname)创建一个File对象,指向dir指定的目录下文件名为namepublicFile(Stringpath,Stringname)创建一个File对象,指向path路径下的name文件File类的构造方法File类:文件操作的常用方法方法说明publicbooleancanRead()判断File对象对应的路径是否可读。publicbooleancanWrite()判断File对象对应的路径是否可写publicbooleanexists()判断File对象对应的路径是否存在。publicStringgetAbsolutePath()获取File对象对应路径的绝对路径。publicStringgetParent()获取File对象对应路径的目录。publicStringgetPath()获取File对象对应的路径。publicbooleanisAbsolute()判断File对象对应的路径是否为绝对路径publicStringgetName()获取File对象对应路径的文件名publicbooleanDelete()删除指定的文件或文件夹。publicbooleanisFile()判断File对象对应的路径是否为文件publicbooleanisHidden()判断File对象对应的文件是否为隐藏属性publiclonglength()获得File对象对应文件的长度publiclonglastModified()获得File对象对应文件的最近修改时间publicbooleanrenameTo(Filedest)更改File对象对应文件的文件名File类:文件夹操作的常用方法方法说明publicbooleanisDirectory()判断File对象对应的路径是否为目录。publicbooleanDelete()删除指定的文件或文件夹。publicbooleanexists()判断File对象对应的路径是否存在。publicStringgetAbsolutePath()获取File对象对应路径的绝对路径。publicStringgetParent()获取File对象对应路径的目录。publicStringgetPath()获取File对象对应的路径。publicStringgetName()获取File对象对应路径的文件名publicString[]list()返回字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。publicFile[]listFile()返回抽象路径名数组,这些路径名表示此抽象路径名的表示的目录中的文件publicbooleanmkdir()创建此抽象路径名指定的目录。publicbooleanmkdirs()创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。publicbooleansetReadOnly()将文件或文件夹设置为只读File类//3.向source.txt文件中写入李白的《静夜思》PrintWriterout=newPrintWriter(sFile);out.println("床前明月光,\r\n疑是地上霜,\r\n举头望明月,\r\n低头思故乡。");out.flush();out.close();在C盘新建一个文件夹,文件夹名为24061201刘菲,在其文件夹中再新建文件,文件名为source.txt,向其中写入李白的《静夜思》。//1.创建文件夹Filefdir=newFile("C:\\24061201刘菲");if(fdir.mkdir()){System.out.println("成功在C盘创建个人文件夹");}//2.创建一个文件FilesFile=newFile(fdir,"source.txt");if(sFile.createNewFile()){ System.out.println("成功在个人文件夹创建文件");}FileInputStream类FileInputStream是文件的字节输入流,从文件系统中的某个文件中获得输入字节,使用该留可以字节为单位从文件中读取数据。FileInputStream类提供的常用构造方法:FileInputStream类提供的常用方法:
publicFileInputStream(Filefile);创建一个从指定File对象表示的文件中读取数据的文件输入流。publicFileInputStream(Stringname);创建用于读取给定的文件系统中路径名name所指定的文件的文件输入流。方法说明publicintread()从此输入流中读取一个数据字节publicintread(byte[]b)从此输入流中将b.length个字节的数据读入到一个byte数组中publicintread(byte[]b,intoff,intlen)从此输入流中将len个字节的数据读入到一个byte数组中。off:目标数组b中的起始偏移量。
FileOutputStream类FileOutputStream是文件的字节输出流,文件输出流是以字节为单位将数据写入到文件中。FileOutputStream其提供的常用构造方法:publicFileOutputStream(Filefile);创建一个向指定File对象表示的文件中写入数据的文件输出流。publicFileOutputStream(Filefile,booleanappend);创建一个向指定File对象表示的文件中写入数据的文件输出流。如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。publicFileOutputStream(Stringname);创建一个向具有指定名称的文件中写入数据的输出文件流。publicFileOutputStream(Stringname,booleanappend);创建一个向具有指定name的文件中写入数据的输出文件流。如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。FileOutputStream其提供的常用方法方法说明publicvoidwrite(intb)向文件中写入一个字节大小的数据public
void
write(byte[]b)将b.length个字节从指定byte数组写入此文件输出流中public
void
write(byte[]b,intoff,intlen)将指定byte数组中从偏移量off开始的len字节写入此文件输出流。FileReader类FileReader类是文件的字符输入流类,读取文件内容,以字符为单位从文件中读取数据。FileReader类的构造方法:publicFileReader(StringfileName);//使用带有指定文件的String参数的构造方法。创建该输入流对象,并关联源文件。
如:FileReaderfr=newFileReader(StringfileName);FileReader类的常用方法方法说明publicintread()读取单个字符。返回作为整数读取的字符,如果已达到流末尾,则返回-1。publicintread(char[]cbuf)将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。publicvoidclose()关闭此流对象。释放与之关联的所有资源。FileWriter类FileWriter类是文件的字符输出流类,是以字符为单位将数据写入文件中。FileWriter类的构造方法:publicFileWriter(StringfileName);//创建字符输出流类对象和已存在的文件相关联。文件不存在的话,并创建。publicFileWriter(StringfileName,booleanappend);//创建字符输出流类对象和已存在的文件相关联,并设置该该流对文件的操作是否为续写。FileWriter类的常用方法方法说明publicvoidwrite(Stringstr)写入字符串。当执行完此方法后,字符数据还并没有写入到目的文件中去。此时字符数据会保存在缓冲区中。publicviodflush()刷新该流中的缓冲。将缓冲区中的字符数据保存到目的文件中去。publicviodclose()关闭此流。在关闭前会先刷新此流的缓冲区。在关闭后,再写入或者刷新的话,会抛IOException异常。文件读/写操作在Java中,系统提供了FileInputStream类与FileOutputStream类以字节形式从文件中读取数据,以及向文件中写入数据。FileReader与FileWriter类以字符形式从文件中读取数据,以及向文件中写入数据。Java中对文件的读操作:创建文件输入流对象,此时文件自动打开或创建;用文件读方法实现读数据关闭输入流,同时关闭文件。Java中对文件的写操作:创建文件输出流对象,此时文件自动打开或创建;用文件写方法实现写数据关闭输出流,同时关闭文件。示例:字符串写入文本文件从字符串content写入MyText.txt,使用File对象表示文件,以FileWriter、BufferedWriter来提高写入效率。Stringcontent[]={"床前明月光,","疑是地上霜。","举头望明月,","低头思故乡。"
};Filefile=newFile("MyText.txt");try{FileWriterfw=newFileWriter(file);BufferedWriterbufw=newBufferedWriter(fw);
for(inti=0;i<content.length;i++){//循环遍历数组bufw.write(content[i]);//将字符串数组中元素写入到磁盘文件中bufw.newLine();//将数组中的单个元素以单行的形式写入文件
}bufw.close();//将BufferedWriter流关闭fw.close();//将FileWriter流关闭}catch(IOExceptione){//处理异常e.printStackTrace();}示例:读取文本文件从文本文件MyText.txt读取数据,使用File对象表示文件,以FileReader来执行实际的读取,并用BufferedReader来读取提高效率。读取是以while循环来执行进行,一直到readLine()结果为null为止。FilemyFile=newFile("D:\\MyText.txt");try{ FileReaderfileReader=newFileReader(myFile); BufferedReaderbuffered=newBufferedReader(fileReader); Stringline=null; while((line=buffered.readLine())!=null){ System.out.println(line); } buffered.close();}catch(IOExceptione){ e.printStackTrace();}数据输入/输出流DataInputStream类是数据输入流,DataOutputStream类是数据输出流,它们提供了与平台无关的操作数据流。DataInputStream类是允许应用程序从底层输入流中读取基本Java数据类型。因此DataInputStream类与DataOutputStream类读写二进制数据。DataInputStream类常用方法方法说明intread(byte[]b)从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组b中intread(byte[]b,intoff,intlen)从包含的输入流中将最多len个字节读入一个byte数组中publicStringreadUTF()读取使用UTF-8编码的Unicode字符串,并返回一个String值publicintreadInt()读取四个输入字节并返回一个int值publicdoublereadDouble()读取八个输入字节并返回一个double值publicBooleanreadBoolean()读取一个输入字节,如果该字节不是零,则返回true,如果是零,则返回falsepublicStringreadChars()读取两个输入字节并返回一个char值数据输入/输出流DataOutputStream类常用方法方法说明voidwrite(intb)将int类型的b写到数据输出流中voidread(byte[]b,intoff,intlen)将字节数组b中off位置开始,len个长度写到数据输出流中publicvoidwriteUTF(Stringstr)以机器无关的方式使用utf-8编码方式将字符串写到基础输出流中publicvoidwriteInt(intv)将一个int类型的数据写到数据输出流中,底层将4个字节写到基础输出流中publicvoidwriteDouble(doublev)将一个double类型的数据写到数据输出流中,底层会将double转换成long类型,写到基础输出流中publicvoidwriteBoolean()将布尔类型的数据写到数据输出流中,底层是转化成一个字节写到基础输出流中publicvoidwriteChars(Strings)将字符串按照字符顺序写到基础输出流中数据输入与输出流写入文件操作StringoutSno="2017011123";StringoutSname="汪馨";intoutSage=18,inSage;FileOutputStreamfos=newFileOutputStream(“student.txt”);BufferedOutputStreambos=newBufferedOutputStream(fos);DataOutputStreamdos=newDataOutputStream(bos);dos.writeUTF(outSno);dos.writeUTF(outSname); dos.writeInt(outSage);dos.close();bos.close();数据初始化12创建FileOutputStream创建BufferedOutputStream35创建DataOutputStream46写入基本数据类型关闭DataOutputStream关闭BufferedOutputStream数据输入与输出流读取文件操作StringinSno;StringinSname;intinSage;FileInputStreamfis=newFileInputStream(“student.txt”);BufferedInputStreambis=newBufferedInputStream(fis);DataInputStreamdis=newDataInputStream(bis);inSno=dis.readUTF();inSname=dis.readUTF();inSage=dis.readInt();dis.close();bis.close();变量初始化12创建FileInputStream创建BufferedInputStream35创建DataInputStream46读取数据关闭DataInputStream关闭BufferedInputStream案例:学生信息的存取操作使用数据输入输出流实现学生信息的存取操作。定义变量用来保存学号、姓名、性别、年龄,成绩,是否统招
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政项目施工全套安全技术交底记录大全
- 公路工程各项施工技术交底记录大全全集
- 2026年乡村振兴感悟:传统农业转型之路
- 水稻可降解钵体毯状苗育秧技术规程
- 机械行业量子计算系列二:技术、产业与政策共振看好整机和核心硬件
- 互联网+时代下企业财务管理创新思考
- 《亲爱的汉修先生》练习题及答案
- 2026年高考化学全国乙卷考试真题及答案
- 2026年北京市大兴区中小学教师招聘考试题库及答案
- 2026年高考北京卷理综数学真题卷附答案
- 【语文】广东省佛山市顺德区北滘镇中心小学小学五年级下册期末试卷
- 加油站特殊作业安全管理制度
- TCNAEC0602-2024全过程工程咨询服务导则
- 2025年安徽专升本c语言考试真题及答案
- 2025煤矿安全规程新旧修改条款对照学习课件
- 工程部预算管理职责清单
- 新能源知识课件下载
- C20混凝土垫层施工方案
- 2025至2030中国脊髓电刺激装置行业项目调研及市场前景预测评估报告
- 2025至2030中国铜板带行业发展趋势分析与未来投资战略咨询研究报告
- 2025年书记员速录技能测试听打材料100篇全真模拟试卷(含高频考点)
评论
0/150
提交评论