博学谷——让IT教学更简单,让IT学习更有效
图8-12 运行结果
运行结果显示正常,添加行号输出达到预期。
三、案例总结
setLineNumber()方法设置当前行号,getLineNumber()方法读取当前行号。在案例当前行号初始值设为100,输出时行号却是从101开始的,这是因为LineNumberReader类在读取到换行符('\\n')、回车符('\\r')或者回车后紧跟换行符时,会将行号自动加1。
案例8-9 转换流拷贝文件
一、案例描述
1、 考核知识点
编 号:00108011 名 称: 转换流
2、 练习目标
? 了解什么是转换流
? 掌握如何使用InputStreamReader和OutputStreamWriter
3、 需求分析
有时字节流和字符流之间也需要进行转换,这时就需要用到转换流。在JDK中提供了两个类可以将字节流转换为字符流,它们分别是InputStreamReader和OutputStreamWriter。为了让初学者掌握转换流的使用,案例中将演示通过转换流拷贝文件并转成大写来学习。
4、 设计思路(实现原理)
1) 在source目录下编写“HelloWrold.java”文件,里面有一段HelloWorld程序。 2) 在同一目录下,编写Example09类。
3) 在main()方法中,创建文件字节输入和输出流对象,然后分别使用转换流包装,为提高效率,
最后再通过缓冲流包装。
4) 使用readLine()方法循环一行行读取源文件并转大写写入到目标文件,直至文件末尾。 5) 调用close()方法,关闭流资源。
二、案例实现
import java.io.*;
public class Example10 {
public static void main(String[] args) {
BufferedReader bfr = null;
16
博学谷——让IT教学更简单,让IT学习更有效
}
}
BufferedWriter bfw = null; try {
InputStream in = new FileInputStream(\// 字符的缓冲读取字节,将字节转成字符
InputStreamReader isr = new InputStreamReader(in); // 建立字符流缓冲区对象
bfr = new BufferedReader(isr);
OutputStream out = new FileOutputStream(\// 字符数据,输出到字节,将字符数据转成字节
OutputStreamWriter osw = new OutputStreamWriter(out); // 建立字符流的缓冲区对象
bfw = new BufferedWriter(osw); String line = null;
while ((line = bfr.readLine()) != null) { }
bfw.write(line.toUpperCase()); bfw.newLine();
} catch (IOException e) { }
throw new RuntimeException(\文件拷贝失败!\try { } try { }
if (bfw != null)
bfw.close(); if (bfw != null)
bfr.close();
} finally {
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(\输入流关闭失败!\
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(\输出流关闭失败!\
程序运行后,分别打开“source”和“target”目录下“HelloWorld.java”文件,结果如图8-13所示:
17
博学谷——让IT教学更简单,让IT学习更有效
图8-13 拷贝结果
从结果可以看出,使用转换流拷贝文件并转大写操作成功。
三、案例总结
在使用转换流时,只能针对操作文本文件的字节流进行转换,如果字节流操作的是一张图片,此时转换为字符流就会造成数据丢失。
案例8-10 对象序列化与反序列化
一、案例描述
1、 考核知识点
编 号:00108013
名 称: ObjectInputStream和ObjectOutputStream类
2、 练习目标
? 了解什么是序列化和反序列化
? 掌握如何使用ObjectInputStream和ObjectOutputStream实现对象的序列化和反序列化
3、 需求分析
使用ObjectOutputStream和ObjectInputStream可以实现对象的序列化和反序列化。为了让初学者掌握这两种类的使用,案例中将通过序列化Person对象到“oos.txt”文件,再反序列化读取该文件获取Person对象数据来学习。
4、 设计思路(实现原理)
1) 编写Person类,实现序列化接口,在类中定义name和age属性,生成get ()和set()方法,并
重写toString()方法。
2) 编写Example10类,在main()方法中通过ObjectOutputStream将赋值后的Person对象序列化
到“oos.txt”文件。
3) 通过ObjectInputStream读取该文件实现Person对象的反序列化,并打印该对象。
二、案例实现
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; public class Example10{
public static void main(String[] args) throws Exception{
// 创建序列化流对象
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(
\
// 创建对象
Person p = new Person(\马云\
18
博学谷——让IT教学更简单,让IT学习更有效
}
import java.io.Serializable;
public class Person implements Serializable { }
private static final long serialVersionUID = 333558257579870816L; private String name; private int age; public Person() { }
public Person(String name, int age) { }
public String getName() { }
public void setName(String name) { }
public int getAge() { }
public void setAge(int age) { }
// 重写toString()方法 public String toString() { }
return \this.age = age; return age; this.name = name; return name; this.name = name; this.age = age; }
// 将Person对象输出到输出流中 oos.writeObject(p); oos.close(); // 创建反序列化流对象
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(
\
// 从oos.txt中读取Person对象 Object obj =ois.readObject(); ois.close();
// 打印反序列化后的对象
System.out.println((Person)obj);
程序运行后,在当前目录下生成了“oos.txt”文件,如图8-14所示:
19
博学谷——让IT教学更简单,让IT学习更有效
图8-14 生成文件
运行结果如图8-15所示。
图8-15 运行结果
三、案例总结
值得注意的是,当对象进行序列化时,必须保证该对象实现Serializable接口,否则程序会出现NotSerializableException异常。
案例8-11 DataInputStream和DataOutputStream
一、案例描述
1、 考核知识点
编 号:00108013
名 称: DataInputStream和DataOutputStream类
2、 练习目标
? 掌握如何使用DataInputStream和DataOutputStream
3、 需求分析
如果只需存储对象的成员数据,这些成员数据的类型又都是基本数据类型,这时就可以使用DataInputStream和DatOutputStream。为了让初学者掌握DataInputStream和DataOutputStream的用法,案例中将演示使用这两个类先向“dos.txt”文件中写入UTF-8的字符串然后再读取来学习。
4、 设计思路(实现原理)
1) 编写Example11类。
2) 在main()方法中通过DataOutputStream向“oos.txt”文件中,写入字符编码为UTF-8的字符串
“你好”。
3) 通过DataInputStream读取文件中该编码的字符串并打印。
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第8章 IO_补充案例(4)在线全文阅读。
相关推荐: