博学谷——让IT教学更简单,让IT学习更有效
输出流和字节数组输入流。为了让初学者熟悉者两个类,在案例中通过使用这两个类来读取和输出一个字符串数据来演示。
4、 设计思路(实现原理)
1) 编写Example14类
2) 在main()方法中使用ByteArrayInputStream(byte[] buf)构造方法,创建一个字节数组输入流对
象,并将要一段字符串读取到缓冲区数组中
3) 创建一个ByteArrayOutputStream,然后在while循环中,将字节数组输入流缓冲区中数据读取
到输出流缓冲区中
4) 将输出流缓冲区中的数据一次性输出到控制台
二、案例实现
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; public class Example14 { }
public static void main(String[] args) { }
//创建一个字节数组输入流,使用缓冲区数组
ByteArrayInputStream bis = new ByteArrayInputStream(
\
//创建一个字节数组输出流
ByteArrayOutputStream bos = new ByteArrayOutputStream(); int by = 0;
//循环读取输入流缓冲区中的数据到输出流缓冲区中 while ((by = bis.read()) != -1) { }
//将缓冲区中的数据一次性输出
System.out.println(bos.toString());
bos.write(by);
程序运行结果如图8-20所示。
图8-20 运行结果
三、案例总结
1、ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。关闭 ByteArrayInputStream是无效的,该类中的方法在关闭此流后仍然可以被调用,而不会产生任何 IOException。
2、ByteArrayOutputStream类实现了一个输出流,其中的数据被写入一个 byte 数组,缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。和ByteArrayInputStream一样,关闭
26
博学谷——让IT教学更简单,让IT学习更有效
ByteArrayOutputStream是无效的,该类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。 3、虽然ByteArrayInputStream的缓冲区会根据存入数据的多少而自动变化,但是读取的文件非常大时,就不能使用这个类,否则会造成内存溢出。
案例8-15 CharArrayReader和CharArrayWriter读写操作
一、案例描述
1、 考核知识点
编 号:00108018
名 称: CharArrayReader和CharArrayWriter
2、 练习目标
? 了解CharArrayReader和CharArrayWriter读写的特点
? 掌握如何使用CharArrayReader和CharArrayWriter进行读写操作
3、 需求分析
要想将字符型数据临时存入缓冲区中,可以使用JDK提供的CharArrayReader和CharArrayWriter类,分别表示字符数组输入流和字符数组输出流,它们的功能与ByteArrayInputStream、ByteArrayOutputStream类似,只不过操作的数据是字符。为了让初学者熟悉这两个类的使用,在案例中将通过读取和输出一个文件中的内容来演示。
4、 设计思路(实现原理)
1) 编写一个类Example15 2) 在main()方法中,使用FileReader读取caw.txt文件中的内容,然后创建CharArrayWriter对象,
将读取的内容写入到CharArrayWriter缓冲区。
3) 创建CharArrayReader对象,读取字符数组缓冲区中的数据并打印
二、案例实现
import java.io.*;
public class Example15 {
public static void main(String[] args) throws Exception {
FileReader fr = new FileReader(\创建一个FileReader对象
CharArrayWriter chaw = new CharArrayWriter();// 在内存中创建一个字符数组缓冲区 // 下面的代码是将数据写入缓冲区 int b;
while ((b = fr.read()) != -1) { }
fr.close(); chaw.close();
char[] chs = chaw.toCharArray();// 将缓冲区中的数据转换成字符型数组 CharArrayReader cr = new CharArrayReader(chs);// 读取字符数组中的数据 // 下面的代码是从缓冲区中读取数据,并进行打印
27
chaw.write(b); // 将读取到的字符写入缓冲区
博学谷——让IT教学更简单,让IT学习更有效
}
}
int i = 0;
while ((i = cr.read()) != -1) { }
System.out.println((char) i);
运行结果如图8-21所示。
图8-21 运行结果
三、案例总结
CharArrayReade从字符数组中读取数据,CharArrayWriter是在内存中创建一个字符数组缓冲区,它们的功能与ByteArrayInputStream、ByteArrayOutputStream类似,只不过操作的数据是字符。
案例8-16 SequenceInputStream
一、案例描述
1、 考核知识点
编 号:00108019
名 称: SequenceInputStream
2、 练习目标
? 掌握如何使用SequenceInputStream合并多个流对象
3、 需求分析
如果希望多个流处理数据,这时就需要将这些流进行合并。JDK提供了SequenceInputStream类,它可以将几个输入流串联在一起,合并为一个输入流。为了让初学者掌握SequenceInputStream的用法,案例中使用这个类将读取不同文件的两个输入流合并,并将合并后的数据输出到另一个文件。
4、 设计思路(实现原理)
1) 2) 3) 4)
编写Example16类
在main()方法中分别创建两个读取不同文件的输入流对象
使用SequenceInputStream合并流将这两个输入流对象对象合并 通过文件输出流将合并后的数据写入到另一个文件中
28
博学谷——让IT教学更简单,让IT学习更有效
二、案例实现
import java.io.*;
public class Example16 { }
public static void main(String[] args) throws Exception { }
// 下面的代码是创建了两个流对象fis1、fis2
FileInputStream fis1 = new FileInputStream(\FileInputStream fis2 = new FileInputStream(\// 创建一个序列流,合并两个字节流fis1和fis2
SequenceInputStream sis = new SequenceInputStream(fis1, fis2); FileOutputStream fos = new FileOutputStream(\int len;
byte[] buf = new byte[1024]; // 创建一个1024个字节数组作为缓冲区 // 下面的代码用于循环读取三个流中的文件 while ((len = sis.read(buf)) != -1) { }
sis.close(); fos.close();
fos.write(buf, 0, len); // 将缓冲区中的数据输出
程序运行结果如图8-22所示。
图8-22 运行结果
三、案例总结
1、上述案例中是对两个流进行合并,要对多个流进行合并可以使用SequenceInputStream类的另一个构造方法,具体如下:
SequenceInputStream(Enumeraion extends InputStream> e)
2、SequenceInputStream类从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
29
博学谷——让IT教学更简单,让IT学习更有效
案例8-17 File类的常用方法的使用
一、案例描述
1、 考核知识点
编 号:00108020
名 称: File类的常用方法
2、 练习目标
? 掌握File类的构造方法及File对象的创建方式 ? 掌握如何使用File类中的常用方法
3、 需求分析
在开发过程中涉及到文件有关的内容时,我们经常会使用到File类,该类中拥有一系列的方法,对于初学者来说很难弄清它们之间的区别,为了让大家熟悉File类中的常用方法,本案例将演示File类中的方法对文件进行操作来学习方法的使用。
4、 设计思路(实现原理)
1) 编写Example17类
2) 在main()方法中使用File(String parent, String child)构造方法创建File文件对象
3) 使用File类的方法对该文件进行各种操作,包括判断文件是否存在,判断是否是文件,获取
文件名称,获取文件大小,获取最后修改时间等等。
二、案例实现
import java.io.File;
import java.io.IOException; import java.sql.Date;
import java.text.DateFormat; public class Example17 {
public static void main(String[] args) throws IOException {
// 创建File文件对象,表示一个文件
File file = new File(\// 判断文件是否存在
System.out.println(\文件是否存在:\存在\不存在\if (!file.exists()) { }
// 获取文件名称
System.out.println(\文件名称:\// 获取文件的相对路径
System.out.println(\文件的相对路径:\// 获取文件的绝对路径
30
// 如果文件不存在便创建该文件
boolean ifcreat = file.createNewFile();
System.out.println(\文件是否创建成功:\
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第8章 IO_补充案例(6)在线全文阅读。
相关推荐: