Day03:文本数据IO操作 / 异常处理
文本数据IO操作
Reader和Writer
字符流原理
Reader是字符输入流的父类
Writer是字符输出流的父类。
字符流是以字符(char)为单位读写数据的。一次处理一个unicode。
字符流的底层仍然是基本的字节流。
常用方法
Reader的常用方法:
int read():读取一个字符,返回的int值"低16"位有效。
int read(char[] chs):从该流中读取一个字符数组的length个字符并存入该数组,返回值为实际读取到的字符量。
常用方法(续1)
Write的常用方法:
void write(int c):写出一个字符,写的给定int值"低16"位表示的字符。
void write(char[] chs):将给定字符数组中所有字符写出。
void write(String str):将给定的字符串写出
void write(char[] chs,int offset,int len):
将给定的字符数组中从offset处开始连续的len个字符写出
转换流
InputStreanReader:字符输入流
OutputStreamWriter:字符输出流
指定字符编码
OutputStreamWriter的构造方法:
OutputStreamWriter(OutputStream out,String charsetName)
基于给定的字节输出流以及字符编码创建OSW
OutputStreamWriter(OutputStream out)
该构造方法会根据系统默认字符集创建OSW
实例:
数据流
print流
object流
异常处理
在java语言出现以前,传统的异常处理方式采用返回值来标示程序出现的异常情况,但这种方式有多个坏处。
异常处理时面向对象语言区别于面向过程语言的重要标志之一,异常的出现可以使我们编写的程序变得强健并且安全。=
异常产生的原因及使用原则
1.Java内部错误发生异常,Java虚拟机产生的异常。
2.编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检查的异常,一般需要在某类中集中处理这些异常。
3.通过throw语句手动生成的异常,这种异常称为检查的异常,一般用来告知该方法的调用者一些必要的信息。
Java通过面向对象的方法处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。
我们把生成异常对象,并把它提交给运行时的系统的过程称为抛出异常。
运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获异常。
Java异常强制用户考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用时捕获程序在运行时发生的异常并进行相应处理。
异常类型
在Java中所有异常类型都是内置类java.lang.Throwable类的子类,即Throwable位于异常类层次结构的顶层。
Throwable类是所有异常和错误的超类。
Error和Exception两个子类分别代表错误和异常。其中异常类Exception又分为i运行是异常和非运行异常,这两种有很大的区别,成称为(Unchecked Exception)和检查异常(Checked Exception)。
运行时异常都是 RuntimeException 类及其子类异常,如 NullPointerException、IndexOutOfBoundsException 等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般由程序逻辑错误引起,程序应该从逻辑角度尽可能避免这类异常的发生。
非运行时异常是指 RuntimeException 以外的异常,类型上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如 IOException、ClassNotFoundException 等以及用户自定义的 Exception 异常,一般情况下不自定义检查异常。
异常类型 | 说明 |
---|---|
Exception | 异常层次结构的根类 |
RuntimeException | 运行时异常,多数 java.lang 异常的根类 |
ArithmeticException | 算术谱误异常,如以零做除数 |
ArraylndexOutOfBoundException | 数组大小小于或大于实际的数组大小 |
NullPointerException | 尝试访问 null 对象成员,空指针异常 |
ClassNotFoundException | 不能加载所需的类 |
NumberF ormatException | 数字转化格式异常,比如字符串到 float 型数字的转换无效 |
IOException | I/O 异常的根类 |
F ileN otF oundException | 找不到文件 |
EOFException | 文件结束 |
InterruptedException | 线程中断 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 类型转换异常 |
SQLException | 操作数据库异常 |
Java的异常处理通过5个关键字来实现:try、cath、throw、throws、finally。
try catch语句用于捕捉并处理异常,finally语句用于声明可能会出现的异常。
异常的捕获和处理
Throwable,Error和Exception
Java异常结构中定义有Throwable类,Exception和Error是其派生的两个子类。其中Exception表示由于网络故障、文件损坏、设备错误、用户输入非法等情况导致的异常;而Error表示Java运行时环境出现的错误,例如:JVM内存资源耗尽等。
try-catch
try{...}语句指定了一段代码,该段代码就是一次捕获并处理例外的范围
在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句分别对这些异常做相应的处理
如果没有异常产生,所有的catch代码段都被略过不执行
在catch语句块中是对异常进行处理的代码
在catch中声明的异常对象(catch(SomeException e))封装了异常事件发生的信息,在catch语句块中可以使用这个对象的一些方法获取这些信息
注意:
一个catch语句也可以捕捉多个异常类型,这时它的异常类型参数应该是这多个异常类型的父类。
多个catch
每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的异常。
catch捕获的异常类型由上至下的捕获异常类型的顺序应是子类到父类的。
子类型异常在前,父类型异常在后,这样的顺序依次捕获。否则编译错误。
finally的作用
语法:
try
{
逻辑代码块
}
catch(ExceptionType e)
{
异常处理代码块
}
finally
{
清理代码块
}
无论是否发生异常(除特殊情况外),finally 语句块中的代码都会被执行。此外,finally 语句也可以和 try 语句匹配使用
语法:
try
{
逻辑代码块
}
finally
{
清理代码块
}
提示:finally 与 try 语句块匹配的语法格式,此种情况会导致异常丢失,所以不常见。
一般情况下,无论是否有异常拋出,都会执行 finally 语句块中的语句。
try catch finally 语句执行流程图
如果代码在 try 内部执行一条 System.exit() 语句,则应用程序将终止而不会执行 finally。
throw关键字
throw 语句用来直接拋出一个异常
语法:
throw ExceptionObject;
当程序发生错误而无法处理的时候,会抛出对应的异常对象,除此之外,在某些时刻,您可能会想到自行抛出异常,例如在异常处理结束后,再将异常抛出,让下一层异常处理块来捕捉,若想要自行抛出异常,您可以使用"throw"关键词,并生成指定的异常对象后抛出。
如果有多个异常类,它们之间用逗号分隔。
throws 关键字
程序会声明许多方法(Method),这些方法中可能会因某些错误而引发异常,但您不希望直接在这个方法中处理这些异常,而希望调用这个它的方法来统一处理,这时候您可以使用"throws"关键词来声明这个方法将会抛出异常
注意:在编写类继承代码时要注意,子类在覆盖父类带 throws 子句的方法时,子类的方法声明中的 throws 子句不能出现父类对应方法的 throws 子句中没有的异常类型,因此 throws 子句可以限制子类的行为。也就是说,子类方法拋出的异常不会超过父类定义的范围。
自定义Exception
自定义异常类必须继承现有的Exception类或Exception的子类来创建。
class 自定义异常类名 extends Exception
自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。
提示:
因为自定义异常继承自 Exception 类,因此自定义异常类中包含父类所有的属性和方法。
Day03:文本数据IO操作 / 异常处理的更多相关文章
- JAVASE02-Unit08: 文本数据IO操作 、 异常处理
Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...
- JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作
基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import ja ...
- 文本数据IO操作--字符流
一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流 ...
- AI学习---数据IO操作&神经网络基础
数据IO操作 TF支持3种文件读取: 1.直接把数据保存到变量中 2.占位符配合feed_dict使用 3. QueueRunner(TF中特有的) 文件读取流程 文件读取流程(多线 ...
- 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)
函数说明: 1. re.sub(r'[^a-zA-Z0-9\s]', repl='', sting=string) 用于进行字符串的替换,这里我们用来去除标点符号 参数说明:r'[^a-zA-Z0- ...
- shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中
shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...
- java中的IO操作
IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式进行,而操作流的对象都封装到java.io包中.根据操作数据的种类可以把IO流分为字节流(InputStream,OutputSt ...
- 23_java之IO操作
01输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操 ...
- 第12讲-Java中的IO操作及对象的序列化与反序列化
1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1 io操作 1.2.2 对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...
随机推荐
- CodeForces - 113B Petr# (后缀数组)
应该算是远古时期的一道题了吧,不过感觉挺经典的. 题意是给出三一个字符串s,a,b,求以a开头b结尾的本质不同的字符串数. 由于n不算大,用hash就可以搞,不过这道题是存在复杂度$O(nlogn)$ ...
- 巧用 Img / JavaScript 采集页面数据
摘要: 当我们有一个新内容时(例如新功能.新活动.新游戏.新文章),作为运营人员总是迫不及待地希望能尽快传达到用户,因为这是获取用户的第一步.也是最重要的一步. 点此查看原文:http://click ...
- 简单的理解 equals和==的区别
直接上代码: //== 比较的是地址 String test = new String("测试"); String test1 = new String("测试" ...
- Waiting (TTFB) 时间
什么是 Waiting (TTFB) 时间 TTFB 是 Time to First Byte 的缩写,指的是浏览器开始收到服务器响应数据的时间(后台处理时间+重定向时间),是反映服务端响应速度的重要 ...
- Verilog状态机使用技巧
“没有什么难处是通过增加一个状态机不能够解决的,如果不行,那就俩..” 在实现某种功能时,若感觉该功能的各种可能状态间的切换太绕了,此时,增加一个状态机往往能使思路变得清晰,功能的实现也就简单明了了. ...
- Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to 'dlopen'的解决办法
在Clion中链接讯飞的语音库并传至树莓派上编译时,出现如下错误. undefined reference to `dlopen' undefined reference to `dlclose' u ...
- pycharm同一目录下无法import其他文件
如图:会出现带有红色波浪线,但是确实有random_walk文件 解决方法: 在当前文件下,右键找到mark Directory as 然后选择source root,完工ok 再如图: 版权声明: ...
- JavaWeb_(Mybatis框架)使用Mybatis对表进行增、删、改、查操作_二
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- CSS-居中方法汇总
CSS居中是前端工程师经常要面对的问题,也是基本技能之一.今天有时间把CSS居中的方案汇编整理了一下,目前包括水平居中,垂直居中及水平垂直居中方案共15种.如有漏掉的,还会陆续的补充进来. 水平居中 ...
- Zookeeper系列(十三)Zookeeper的请求处理
作者:leesf 掌控之中,才会成功:掌控之外,注定失败. 出处:http://www.cnblogs.com/leesf456/p/6179118.html尊重原创,奇文共欣赏: 一.前言 在 ...