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

时间:2022-07-01 02:36:44

    Unit08: 文本数据IO操作 、 异常处理    

* java.io.ObjectOutputStream
 * 对象输出流,作用是进行对象序列化

package day08;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; /**
* java.io.ObjectOutputStream
* 对象输出流,作用是进行对象序列化
* 对象序列化:将一个java中的对象转换为一组字节的
* 过程
* 对象流是高级流。
* @author adminitartor
*
*/
public class ObjectOutputStream_WriteObject {
public static void main(String[] args) throws Exception {
Person person = new Person();
person.setName("苍老师");
person.setAge(18);
person.setGender("女"); List<String> otherInfo
= new ArrayList<String>();
otherInfo.add("是一名演员");
otherInfo.add("爱好是写大字");
otherInfo.add("促进中日文化交流");
otherInfo.add("是广大男性同胞的启蒙老师");
person.setOtherInfo(otherInfo); System.out.println(person); /*
* 将Person对象写入文件
*/
FileOutputStream fos
= new FileOutputStream("person.obj"); ObjectOutputStream oos
= new ObjectOutputStream(fos);
/*
* void writeObject(Object obj)
* 将给定的对象转换为一组字节后写出
*
* 若想将一个对象序列化,要求该对象所属的
* 类必须实现可序列化接口,否则会抛出异常。
*/
oos.writeObject(person);
System.out.println("对象写出完毕!"); oos.close(); }
}

ObjectOutputStream_WriteObject.java

* 该类用于测试对象流的读写对象操作

package day08;

import java.io.Serializable;
import java.util.List; /**
* 该类用于测试对象流的读写对象操作
* @author adminitartor
*
*/
public class Person implements Serializable{
private String name;
private int age;
private String gender;
/*
* transient关键字
* 被该关键字修饰的属性在进行对象序列化的时候
* 值会被忽略。将无需保存的属性用该关键字修饰
* 可以达到对象序列化时的"瘦身"工作,减少资源
* 开销
* 除此之外,该关键字没有其他任何作用。
*/
private transient List<String> otherInfo; Person(){ } public Person(String name, int age, String gender, List<String> otherInfo) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.otherInfo = otherInfo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
/**
* 通常一个方法内部抛出什么异常,方法上就要
* 使用throws声明该异常的抛出,以通知调用者
* 这里可能出现什么问题,要求其处理。
* 只有一类异常抛出时可以不声明,
* 就是RuntimeException及其子类异常
* @param age
* @throws Exception
*/
public void setAge(int age) throws Exception{
if(age<0||age>100){
throw new Exception("年龄不合法!");
}
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public List<String> getOtherInfo() {
return otherInfo;
}
public void setOtherInfo(List<String> otherInfo) {
this.otherInfo = otherInfo;
} @Override
public String toString() {
return name+","+age+","+gender+","+
otherInfo;
}
}

Person.java

* java.io.ObjectInputStream
 * 对象输入流,用于进行:对象返序列化

package day08;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream; /**
* java.io.ObjectInputStream
* 对象输入流,用于进行:对象返序列化
*
* @author adminitartor
*
*/
public class ObjectInputStream_ReadObject {
public static void main(String[] args) throws IOException, ClassNotFoundException {
/*
* 将person.obj文件中的对象读取出来
*/
FileInputStream fis
= new FileInputStream("person.obj"); ObjectInputStream ois
= new ObjectInputStream(fis); Person person = (Person)ois.readObject();
System.out.println("读取对象完毕!");
System.out.println(person); ois.close();
}
}

ObjectInputStream_ReadObject.java

* java.io.OutputStreamWriter
 * 该流也叫做转换流,是字符输出流的一个常用实现类。

package day08;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter; /**
* Writer,Reader
* 这俩个流是所有字符流的父类
* 字符流:以字符为单位读写数据。
*
* java.io.OutputStreamWriter
* 该流也叫做转换流,是字符输出流的一个常用
* 实现类。
* @author adminitartor
*
*/
public class OutputStreamWriter_Write {
public static void main(String[] args) throws IOException {
FileOutputStream fos
= new FileOutputStream("osw.txt"); OutputStreamWriter osw
= new OutputStreamWriter(fos,"UTF-8"); osw.write("我爱北京*");
osw.write("*上太阳升"); System.out.println("写出完毕!");
osw.close();
}
}

OutputStreamWriter_Write.java

* java.io.InputStreamReader
 * 转换流

package day08;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader; /**
* java.io.InputStreamReader
* 转换流
* @author adminitartor
*
*/
public class InputStreamReader_Read {
public static void main(String[] args) throws IOException {
FileInputStream fis
= new FileInputStream("osw.txt"); InputStreamReader isr
= new InputStreamReader(fis,"UTF-8"); int d = -1;
while((d = isr.read())!=-1){
System.out.print((char)d);
} isr.close();
}
}

InputStreamReader_Read.java

* java.io.PrintWriter
 * 常用的缓冲字符输出流
 * 特点是:可以按行写出字符串,并且具有自动行刷新

package day08;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter; /**
* java.io.PrintWriter
* 常用的缓冲字符输出流
* 特点是:可以按行写出字符串,并且具有自动行刷新
* PrintWriter内部嵌套java.io.BufferedWriter
* 所以缓冲功能是靠内部的BW实现的。
* @author adminitartor
*
*/
public class PrintWriter_Println {
public static void main(String[] args) throws IOException {
/*
* PrintWriter提供了多种构造方法
* 方便快速创建。
* 其中有直接针对文件写操作的构造方法:
* PrintWriter(String path)
* PrintWriter(File file)
*/
PrintWriter pw
= new PrintWriter("pw.txt","utf-8"); pw.println("锄禾日当午");
pw.println("清明上河图"); System.out.println("写出完毕!");
pw.close();
}
}

PrintWriter_Println.java

* 当使用PrintWriter处理其他流的时候,
 * 可以指定自动行刷新,即:每当使用println方法
 * 写出内容后,会自动flush

package day08;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter; /**
* 当使用PrintWriter处理其他流的时候,
* 可以指定自动行刷新,即:每当使用println方法
* 写出内容后,会自动flush
* @author adminitartor
*
*/
public class PrintWriter_AutoFlush {
public static void main(String[] args) throws IOException {
FileOutputStream fos
= new FileOutputStream("pw1.txt");
//若需要按照指定字符集,需要加上转换流
OutputStreamWriter osw
= new OutputStreamWriter(fos,"UTF-8");
/*
* 当创建PrintWriter时第一个参数为流,
* 那么就支持传入第二个参数,该参数为
* boolean值,表示是否自动行刷新。当
* 该值为true则具备自动行刷新
*/
PrintWriter pw
= new PrintWriter(osw,true);
/*
* 具备自动行刷新的PW在调用println方法
* 写出一行字符串后会自动flush。
* 注意,调用print方法不会自动刷新
*/
pw.println("随便吧");
pw.println("我已经不知道该写啥了"); System.out.println("写出完毕!");
pw.close();
}
}

PrintWriter_AutoFlush.java

* java.io.BufferedReader
 * 缓冲字符输入流,特点:使用它可以按行读取字符串

package day08;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader; /**
* java.io.BufferedReader
* 缓冲字符输入流,特点:使用它可以按行读取字符串
* @author adminitartor
*
*/
public class BufferedReader_ReadLine {
public static void main(String[] args) throws IOException {
FileInputStream fis
= new FileInputStream(
"src"+File.separator+
"day08"+File.separator+
"BufferedReader_ReadLine.java"
); InputStreamReader isr
= new InputStreamReader(fis); BufferedReader br
= new BufferedReader(isr); /*
* String readLine()
* 按行读取字符串
* 连续读取若干字符,直到遇见换行符为止,
* 然后将换行符之前的内容以一个字符串返回
* 但是返回的字符串中不含有最后的换行符
* 当返回值为NULL时,表示读取到末尾了
*/
String line = null;
while( (line = br.readLine()) != null ){
System.out.println(line);
} br.close();
}
}

BufferedReader_ReadLine.java

* 异常捕获机制中的try-catch

package day08;
/**
* 异常捕获机制中的try-catch
* @author adminitartor
*
*/
public class Exception_Try_Catch {
public static void main(String[] args) {
System.out.println("程序开始了"); try{ String str = "a";
System.out.println(str.length()); System.out.println(str.charAt(0)); System.out.println(Integer.parseInt(str)); //try中出错代码之下的代码都不会被执行
System.out.println("!!!!!!!!"); }catch(NullPointerException e){
System.out.println("出现了空指针!"); }catch(StringIndexOutOfBoundsException e){
System.out.println("字符串下标越界了!");
/*
* 应当有一个好习惯,在最后一个catch中捕获
* Exception.
* 并且多个catch捕获异常时,子类异常在上先
* 捕获,而父类异常在下后捕获。
*/
}catch(Exception e){
System.out.println("反正就是出了个错!");
} System.out.println("程序结束了");
}
}

Exception_Try_Catch.java

* 异常捕获机制中的finally块

package day08;
/**
* 异常捕获机制中的finally块
* finally块只能定义在异常捕获机制的最后
* finally块可以保证其中的代码一定被执行,无论
* try块中的代码是否抛出异常,甚至return。
*
* 通常会将诸如释放资源等一类的代码定义在finally中
* 比如:使用流后的close工作可以放在finally中确保
* 一定可以关闭流。
* @author adminitartor
*
*/
public class Exception_Finally {
public static void main(String[] args) {
System.out.println("程序开始了"); try {
String str = "";
System.out.println(str.length());
return;
} catch (Exception e) {
System.out.println("出错了");
} finally{
System.out.println("finally代码执行了!");
} System.out.println("程序结束了");
}
}

Exception_Finally.java

* finally在流处理中的应用

package day08;

import java.io.PrintWriter;

/**
* finally在流处理中的应用
* @author adminitartor
*
*/
public class Exception_Finally2 {
public static void main(String[] args) {
PrintWriter pw = null;
try {
pw = new PrintWriter("pw.txt");
pw.println("hello");
} catch (Exception e) {
System.out.println("出错了!");
} finally{
if(pw != null){
pw.close();
}
}
}
}

Exception_Finally2.java

* throw关键字

package day08;
/**
* throw关键字
* 用于将一个异常抛出
* 通常两种情况下会主动抛出异常:
* 1:遇到满足语法要求,但是不满足业务逻辑要求时,
* 可以当作异常对待抛出,通知调用者这是非法操作。
* 2:当遇到了一个异常,但是当前代码不应当解决该
* 异常时,可以将其抛出交给调用者解决。
* @author adminitartor
*
*/
public class Exception_Throw {
public static void main(String[] args) {
Person p = new Person();
try{
/*
* 当调用一个含有throws声明异常抛出
* 的方法时,编译器要求必须有处理该
* 异常的手段,有两种:
* 1:使用try-catch捕获
* 2:在当前方法上继续使用throws声明
* 这个异常的抛出
* 具体用哪个取决于异常应该归谁处理。
*/
p.setAge(10);
}catch(Exception e){
System.out.println("出错了!");
}
System.out.println(p.getAge());
}
}

Exception_Throw.java

* 子类在重写父类含有throws声明异常抛出的方法时
 * 子类该方法中throws的重写准则

package day08;

import java.awt.AWTException;
import java.io.IOException;
import java.sql.SQLException;
/**
* 子类在重写父类含有throws声明异常抛出的方法时
* 子类该方法中throws的重写准则
* @author adminitartor
*
*/
public class Exception_Override {
public void dosome()
throws IOException,AWTException{ }
} class Son extends Exception_Override{
/**
* 抛出部分异常
*/
// public void dosome() throws IOException{
//
// }
/**
* 不再抛出任何异常
*/
// public void dosome(){
//
// } /**
* 可以抛出父类方法抛出异常的子类型异常
*/
// public void dosome() throws FileNotFoundException{
//
// } /**
* 不可以抛出父类方法抛出异常的父类型异常
*/
// public void dosome() throws Exception{
//
// } /**
* 不可以抛出额外异常
*/
// public void dosome() throws SQLException{
//
// }
}

Exception_Override.java

* Exception中的常用方法

package day08;
/**
* Exception中的常用方法
* @author adminitartor
*
*/
public class Exception_API {
public static void main(String[] args) {
System.out.println("程序开始了");
try {
String str = "abc";
System.out.println(Integer.parseInt(str));
} catch (Exception e) {
//输出错误堆栈信息
e.printStackTrace();
//获取异常消息
String message = e.getMessage();
System.out.println(message);
}
System.out.println("程序结束了");
}
}

Exception_API.java

异常的使用:

IllegalAgeException文件,是生成的,Source → Generate Constructors from Superclass ;

作用:(年龄不合法异常,当指定的年龄范围在0-100以外的数字时会抛出该异常)

Person文件:在set Age 方法这里使用了 IllegalAgeException 自己定义的这个异常;

Exception_Throw文件:使用set Age方法时候,要进行异常处理,并且把鼠标放在

“catch (IllegalAgeException e)”上面,还会有异常提示;

package day08;

import java.io.Serializable;
import java.util.List; /**
* 该类用于测试对象流的读写对象操作
* @author adminitartor
*
*/
public class Person implements Serializable{
private String name;
private int age;
private String gender;
/*
* transient关键字
* 被该关键字修饰的属性在进行对象序列化的时候
* 值会被忽略。将无需保存的属性用该关键字修饰
* 可以达到对象序列化时的"瘦身"工作,减少资源
* 开销
* 除此之外,该关键字没有其他任何作用。
*/
private transient List<String> otherInfo; Person(){ } public Person(String name, int age, String gender, List<String> otherInfo) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.otherInfo = otherInfo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
/**
* 通常一个方法内部抛出什么异常,方法上就要
* 使用throws声明该异常的抛出,以通知调用者
* 这里可能出现什么问题,要求其处理。
* 只有一类异常抛出时可以不声明,
* 就是RuntimeException及其子类异常
* @param age
* @throws Exception
*/
public void setAge(int age) throws IllegalAgeException{
if(age<0||age>100){
throw new IllegalAgeException("年龄不合法!");
}
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public List<String> getOtherInfo() {
return otherInfo;
}
public void setOtherInfo(List<String> otherInfo) {
this.otherInfo = otherInfo;
} @Override
public String toString() {
return name+","+age+","+gender+","+
otherInfo;
}
}

Person.java

package day08;
/**
* 年龄不合法异常
* 当指定的年龄范围在0-100以外的数字时会抛出
* 该异常
* @author adminitartor
*
*/
public class IllegalAgeException extends Exception{ public IllegalAgeException() {
super();
// TODO Auto-generated constructor stub
} public IllegalAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
} public IllegalAgeException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
} public IllegalAgeException(String message) {
super(message);
// TODO Auto-generated constructor stub
} public IllegalAgeException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
} }

IllegalAgeException.java

package day08;
/**
* throw关键字
* 用于将一个异常抛出
* 通常两种情况下会主动抛出异常:
* 1:遇到满足语法要求,但是不满足业务逻辑要求时,
* 可以当作异常对待抛出,通知调用者这是非法操作。
* 2:当遇到了一个异常,但是当前代码不应当解决该
* 异常时,可以将其抛出交给调用者解决。
* @author adminitartor
*
*/
public class Exception_Throw {
public static void main(String[] args) {
Person p = new Person(); /*
* 当调用一个含有throws声明异常抛出
* 的方法时,编译器要求必须有处理该
* 异常的手段,有两种:
* 1:使用try-catch捕获
* 2:在当前方法上继续使用throws声明
* 这个异常的抛出
* 具体用哪个取决于异常应该归谁处理。
*/
try {
p.setAge(1000);
} catch (IllegalAgeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} System.out.println(p.getAge());
}
}

Exception_Throw.java

JAVASE02-Unit08: 文本数据IO操作 、 异常处理的更多相关文章

  1. Day03&colon;文本数据IO操作 &sol; 异常处理

    文本数据IO操作 Reader和Writer 字符流原理  Reader是字符输入流的父类  Writer是字符输出流的父类. 字符流是以字符(char)为单位读写数据的.一次处理一个unicode. ...

  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操作&amp&semi;神经网络基础

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

  5. 机器学习入门-文本数据-构造词频词袋模型 1&period;re&period;sub&lpar;进行字符串的替换&rpar; 2&period;nltk&period;corpus&period;stopwords&period;words&lpar;获得停用词表&rpar; 3&period;nltk&period;WordPunctTokenizer&lpar;对字符串进行分词操作&rpar; 4&period;np&period;vectorize&lpar;对函数进行向量化&rpar; 5&period; CountVectorizer&lpar;构建词频的词袋模型&rpar;

    函数说明: 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&lowbar;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. HDU--最小路

    最小路 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  2. 控件(文本类)&colon; TextBox&comma; PasswordBox

    介绍背水一战 Windows 10 之 控件(文本类) TextBox PasswordBox 示例1.TextBox 的示例 1Controls/TextControl/TextBoxDemo1.x ...

  3. I&sol;O复用模型之select学习

    linux下的I/O模型可以分为5种: 1.阻塞式I/O模型 2.非阻塞式I/O模型 3.I/O复用模型 4.信号驱动I/O模型 5.异步I/O模型 简单解释: 阻塞和非阻塞:就是说需要做一件事的时候 ...

  4. HDU 2236:无题II(二分搜索&plus;二分匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2236 题意:中文题意. 思路:先找出最大和最小值,然后二分差值,对于每一个差值从下界开始枚举判断能不能二分匹配. ...

  5. Onlylady介绍

    Onlylady介绍 Onlylady介绍

  6. linux截取字符串的多种方法

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.hao.com/123.htm . . 一 # 号截取,删除左边字符,保留右边字符. echo ${var#*/ ...

  7. 把Wordpress集成到zen-cart里方法 各种修改 经典机制

    作者: 闻庭牛 | 分类: zen cart插件精解 | 浏览: 4 | 评论: 暂时没有评论 如果你的Zen-cart需要一个Blog来发布一些你的最新动态,可以试试Wordpress,并且用WOZ ...

  8. js从时间戳中获取日期

    1,从时间戳中解析出年月日时分秒: time为时间戳: var timestr = new Date(parseInt(time) * 1000); var year = timestr.getFul ...

  9. HTML中的表单

    1.HTML中表单元素的基本概念 HTML表单是HTML元素中较为复杂的部分,表单往往和脚本,动态页面,数据处理等功能相结合,因此是制作动态网站很重要的内容. 表单一般用来收集用户的输入信息 2.表单 ...

  10. Android 音视频深入 十九 使用ijkplayer做个视频播放器&lpar;附源码下载&rpar;

    项目地址https://github.com/979451341/Myijkplayer 前段时候我觉得FFmpeg做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都 ...