文本数据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 异常,一般情况下不自定义检查异常。

 Java中常见的异常类型
异常类型 说明
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操作 / 异常处理的更多相关文章

  1. JAVASE02-Unit08: 文本数据IO操作 、 异常处理

    Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...

  2. JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

    基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import ja ...

  3. 文本数据IO操作--字符流

    一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流 ...

  4. AI学习---数据IO操作&神经网络基础

    数据IO操作 TF支持3种文件读取:    1.直接把数据保存到变量中    2.占位符配合feed_dict使用    3. QueueRunner(TF中特有的) 文件读取流程 文件读取流程(多线 ...

  5. 机器学习入门-文本数据-构造词频词袋模型 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- ...

  6. shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中

    shell编程系列24--shell操作数据库实战之利用shell脚本将文本数据导入到mysql中 利用shell脚本将文本数据导入到mysql中 需求1:处理文本中的数据,将文本中的数据插入到mys ...

  7. java中的IO操作

    IO流是用来处理设备之间的数据传输,Java对数据的操作是通过流的方式进行,而操作流的对象都封装到java.io包中.根据操作数据的种类可以把IO流分为字节流(InputStream,OutputSt ...

  8. 23_java之IO操作

    01输入和输出 * A:输入和输出 * a: 参照物 * 到底是输入还是输出,都是以Java程序为参照 * b: Output * 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操 ...

  9. 第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 ...

随机推荐

  1. jQuery 查找父节点 parents()与closest()

    parents()由内向外,直到最高的父节点停止查找,返回的父节点是多个 closest()由内向外查找,当找到符合规则的一个,则不再查找,返回的是0或1个

  2. keras使用AutoEncoder对mnist数据降维

    import keras import matplotlib.pyplot as plt from keras.datasets import mnist (x_train, _), (x_test, ...

  3. 开源笔记软件Joplin

    Joplin is a free, open source note taking and to-do application, which can handle a large number of ...

  4. Python基础--01小项目体现的基础知识

    part1:猜拳游戏 #coding=utf-8 #当有汉语时可能编译器不认识,需要定义代码 ''' 多行注释 写这个程序是为了熟悉python的基本语法 这是第一个小例子包含简单的if判断,循环和输 ...

  5. ZOJ - 4114 Flipping Game

    ZOJ - 4114 Flipping Game 题目大意:给出两个串s,t,n个灯泡的序列,1代表开着,0代表关着,一共操作k轮,每轮改变m个灯泡的状态,问最终能把s串变成t串的方案数. 坤神题解. ...

  6. HDU3501 Calculation 2 [欧拉函数]

    题目传送门 Calculation 2 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. luogu P4194 矩阵

    嘟嘟嘟 先二分. 令二分的值为\(mid\),则对于每一行都要满足\(|\sum_{i = 1} ^ {n} (A_{ij} - B_{ij})|\),把绝对值去掉,就得到了\((\sum_{i = ...

  8. Python基础面试题整理

    基础 Python中lambda是什么意思 Python中的pass是什么意思 作为解释型语言,Python如何运行 什么是Python的单元测试 在Python中unittest是什么 如何将数字转 ...

  9. typedef void (*funcptr)(void)的含义

    fun a;//等价于void (*a)(); 这样声明起来就方便多了 void (*a)();表示a是个指针,指向一个不带参数.返回值为空的函数 定义一个函数指针类型. 比如你有三个函数: void ...

  10. K - Kia's Calculation(贪心)

    Kia's Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...