博学谷——让IT教学更简单,让IT学习更有效
第八章 补充案例
案例8-1 FileInputStream读取文件数据
一、案例描述
1、 考核知识点
编 号:00108002
名 称: 字节流读写文件--读取文件
2、 练习目标
? 掌握如何使用FileInputStream字节流读取文件中数据
3、 需求分析
在操作文件时,最常见的就是从文件中读取数据并将数据写入文件,即文件的读写。针对文件的读操作,JDK专门提供了FileInputStream类。为了让初学者掌握FileInputStream字节流的使用,在案例中将针对读取并打印指定文件中的数据进行演示。
4、 设计思路(实现原理)
1) 创建一个文本文件fis.txt,在文件中编辑内容“Welcome to learn IO stream!”。 2) 在同一目录下创建Example01.java文件,编写Example01类。
3) 在main()方法中,通过FileInputStream(String name)构造方法创建文件输入字节流对象,并指
定待读取文件fis.txt的路径。
4) 在while循环条件中使用read()方法每次读取一个字节,同时在循环体中打印每次读取的数据,
当read()方法返回值为-1时表示读取到文件结尾,循环结束。 5) 使用close()方法,关闭流资源。
二、案例实现
import java.io.FileInputStream; import java.io.IOException; public class Example01 {
public static void main(String[] args) throws IOException {
// 创建字节输入流对象
FileInputStream fis = new FileInputStream(\// 读取所有字节 int by = 0;
while ((by = fis.read()) != -1) { }
// 关闭字节输入流 fis.close();
1
System.out.print((char) by);
博学谷——让IT教学更简单,让IT学习更有效
}
}
运行结果如图8-1所示。
图8-1 运行结果
从运行结果可以看出,使用FileInputStream类成功地读取出fis.txt文件中的数据。
三、案例总结
1、通过FileInputStream(String name)构造方法创建FileInputStream对象时,传入的待读取文件的路径,可以是相对路径也可以是绝对路径。
2、在读取文件数据时,必须保证文件是存在并且可读的,否则会抛出文件找不到的异常FileNotFoundException。
3、FileInputStream类有三个重载的read()方法,如果方法返回值为-1,均表示已读取到了文件的结尾。 4、为了使流对象所占用的系统资源得到释放,请记住调用FileInputStream类close()方法关闭字节流。 5、思考一下:修改Example01类,如何实现只读取文件的单个字节?代码如下:
import java.io.FileInputStream; import java.io.IOException; /*
* 读取单个字节 */
public class Example01 { }
public static void main(String[] args) throws IOException { }
// 创建字节输入流对象
FileInputStream fis = new FileInputStream(\// 读取单个字节 int i = fis.read(); System.out.println(i); // 关闭字节输入流 fis.close();
案例8-2 FileOutputStream写入数据
一、案例描述
1、 考核知识点
编 号:00108003
名 称: 字节流读写文件--写入文件
2
博学谷——让IT教学更简单,让IT学习更有效
2、 练习目标
? 掌握如何使用FileOutputStream字节流向文件写入数据
3、 需求分析
与FileInputStream对应的是FileOutputStream,它是操作文件的字节输出流,专门用于把数据写入文件。为了让初学者掌握FileOutputStream字节流的使用,在案例中将通过演示向文本文件写入一段文字来学习。
4、 设计思路(实现原理)
1) 编写Example02类。 2) 在main()方法中,通过FileOutputStream(String name)构造方法创建文件输出字节流对象,并指
定写入的文件路径。
3) 定义一段字符串,并将它转换成byte数组,然后通过write(byte[] b)方法,将byte数组写入到
文件输出流中。
4) 使用FileOutputStream类的close()方法,关闭流资源。
二、案例实现
import java.io.FileOutputStream; import java.io.IOException; public class Example02 { }
public static void main(String[] args) throws IOException { }
// 创建字节输出流对象
FileOutputStream fos = new FileOutputStream(\// 用字符串转换字节数组
byte[] b = \欢迎学习IO流\// 将数组中数据写入文件 fos.write(b); // 关闭输出流 fos.close();
程序运行后,会在当前目录下生成一个新的文本文件fos.txt,文件内容如图8-2所示:
图8-2 fos.txt
从运行结果可以看出,使用FileOutputStream类成功把数据写入文件。
3
博学谷——让IT教学更简单,让IT学习更有效
三、案例总结
1、与FileInputStream读取的文件必须存在不同,FileOutputStream写入数据的文件不必是已存在的,因为该文件会被自动创建。
2、FileOutputStream类有三个重载的write()方法,可以分别向文件中一次写入单个字符、字符数组以及数组的部分数据。
3、思考一下:我们在使用案例中的方式,多次向fos.txt文件中写入不同数据时,发现文件中原有内容被新数据替代了。请问如果希望在原有文件内容之后追加新内容,如何修改Example02类?代码如下:
import java.io.FileOutputStream; import java.io.IOException; public class Example02 { }
public static void main(String[] args) throws IOException { }
// 创建字节输出流对象
FileOutputStream fos = new FileOutputStream(\// 用字符串转换字节数组
byte[] b = \,真的很好玩\// 将数组内容写入文件 fos.write(b); // 关闭输出流 fos.close();
程序运行后,再次打开fos.txt,文件内容如图8-3所示:
图8-3 fos.txt
以上代码中使用了FileOutputStream的另一个构造方法FileOutputStream(String fileName, boolean append) 来创建文件输出流对象,当设置append参数值为true时表示追加内容,从上图可以看出新内容成功追加到原有内容以后。
案例8-3 自定义缓冲区拷贝大文件
一、案例描述
1、 考核知识点
编 号:00108005
名 称: 字节流的缓冲区
2、 练习目标
4
博学谷——让IT教学更简单,让IT学习更有效
? 掌握如何自定义缓冲区
? 掌握如何使用自定义缓冲区读、写文件 ? 了解自定义缓冲区读写的优点
3、 需求分析
操作文件时一个个字节的读写,效率非常低,为了提高效率可以自定义一个字节数组作为缓冲区。为了让初学者掌握如何使用自定义缓冲区读写文件,案例中将演示使用字节流的自定义缓冲区拷贝“IO流.avi”文件到其它目录来学习。
4、 设计思路(实现原理)
1) 在当前目录下创建source和target文件夹,并在source文件夹中存放一个“IO流.avi”文件。 2) 编写Example03类。 3) 在main()方法中,分别创建文件字符输出流和文件字符输入流对象,并指定文件拷贝的源及目
标路径。
4) 自定义一个1024长度的字节数组作为缓冲区,然后通过输入流将源文件数据读取到缓冲区中,
输出流再将缓冲区中数据写入到目标文件中,循环往复直到文件拷贝结束,并计算拷贝文件总耗时。
5) 使用close()方法,关闭流资源。
二、案例实现
import java.io.*;
public class Example03 {
public static void main(String[] args) {
FileInputStream fis = null; FileOutputStream fos = null; try {
// 创建文件字符输出流和文件字符输入流对象
fis = new FileInputStream(\流.avi\fos = new FileOutputStream(\流.avi\// 创建字节数组,用于缓存读取的字节 byte[] bys = new byte[1024]; int len = 0;
long starttime = System.currentTimeMillis();// 获取拷贝文件前的系统时间 // 读取到文件结束时,返回-1
while ((len = fis.read(bys)) != -1) { }
long overtime = System.currentTimeMillis();// 获取拷贝文件结束的系统时间 System.out.println(\拷贝文件消耗的时间为:\毫秒\e.printStackTrace();
throw new RuntimeException(\拷贝文件失败!\
// 将缓冲区中的数据写入文件 fos.write(bys, 0, len);
} catch (IOException e) {
} finally {
5
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库第8章 IO_补充案例在线全文阅读。
相关推荐: