1.文件字符流拷贝
package ``task17``;<br />``import ``java.io.FileReader``;<br />``import ``java.io.FileWriter``;<br />``import ``java.io.IOException``;<br />``public class ``FileCopyTest {
``public static void ``main``(String[] args) {
FileReader fr = ``null;<br />`` ``FileWriter fw = ``null;<br />`` try ``{fr = ``new ``FileReader(``"d:/Java.txt"``)``;<br />`` ``fw = ``new ``FileWriter(``"d:/Java01.txt"``)``;<br />`` ``System.``_out_``.println(``"``努力加载中!!!``"``)``;<br />`` int ``res = ``0``;<br />`` while ``((res = fr.read()) != -``1``){fw.write(res)``;<br />`` ``}} ``catch ``(IOException e) {e.printStackTrace()``;<br />`` ``} ``finally ``{
``if ``(``null ``!= fw) {``try ``{fw.close()``;<br />`` ``} ``catch ``(IOException e) {e.printStackTrace()``;<br />`` ``}}``if ``(``null ``!= fr) {``try ``{fr.close()``;<br />`` ``} ``catch ``(IOException e) {e.printStackTrace()``;<br />`` ``}}}
}}
2.文件字节流的拷贝
17.4.3 FileOutputStream类(重点)
(1)基本概念
java.io.FileOutputStream类主要用于将图像数据之类的原始字节流写入到输出流中。
(2)常用的方法
**方法声明 功能介绍**FileOutputStream(String name)根据参数指定的文件名来构造对象FileOutputStream(String name,boolean append)以追加的方式根据参数指定的文件名来构造对象void write(int b)将指定字节写入此文件输出流void write(byte[] b, int offff, int len)将指定字节数组中从偏移量``offff``开始的``len``个字节写入此文件输出流void write(byte[] b)将`` b.length ``个字节从指定字节数组写入此文件输出流中void flflush()刷新此输出流并强制写出任何缓冲的输出字节void close()关闭流对象并释放有关的资源
17.4.4 FileInputStream类(重点)
(1)基本概念
java.io.FileInputStream类主要用于从输入流中以字节流的方式读取图像数据等。
(2)常用的方法
方法声明 功能介绍FileInputStream(Stringname)根据参数指定的文件路径名来构造对象int read()从输入流中读取单个字节的数据并返回,返回``-1``表示读取到末尾int read(byte[] b, intoffff, int len)从此输入流中将最多``len``个字节的数据读入字节数组中,返回读取到的字节个数,返回``-1``表示读取到末尾int read(byte[] b)从此输入流中将最多`` b.length ``个字节的数据读入字节数组中,返回读取到的字节个数,返回``-1``表示读取到末尾void close()关闭流对象并释放有关的资源int available()获取输入流所关联文件的大小
读取图像数据和视频数据的案例代码
package com.lagou.task17;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileByteCopyTest {public static void main(String[] args) {// 获取当前系统时间距离1970年1月1日0时0分0秒的毫秒数long g1 = System.currentTimeMillis();FileInputStream fis = null;FileOutputStream fos = null;try {// 1.创建FileInputStream类型的对象与d:/03 IO流的框架图.png文件关联//fis = new FileInputStream("d:/03 IO流的框架图.png");fis = new FileInputStream("d:/02_IO流的框架结构.mp4");// 2.创建FileOutputStream类型的对象与d:/IO流的框架图.png文件关联//fos = new FileOutputStream("d:/IO流的框架图.png");fos = new FileOutputStream("d:/IO流的框架结构.mp4");// 3.不断地从输入流中读取数据内容并写入到输出流中System.out.println("正在玩命地拷贝...");// 方式一:以单个字节为单位进行拷贝,也就是每次读取一个字节后再写入一个字节// 缺点:文件稍大时,拷贝的效率很低/*int res = 0;while ((res = fis.read()) != -1) {fos.write(res);}*/// 方式二:准备一个和文件大小一样的缓冲区,一次性将文件中的所有内容取出到缓冲区然后一次性写入进去// 缺点:若文件过大时,无法申请和文件大小一样的缓冲区,真实物理内存不足/*int len = fis.available();System.out.println("获取到的文件大小是:" + len);byte[] bArr = new byte[len];int res = fis.read(bArr);System.out.println("实际读取到的文件大小是:" + res);fos.write(bArr);*/// 方式三:准备一个相对适当的缓冲区,分多次将文件拷贝完成byte[] bArr = new byte[1024];int res = 0;while ((res = fis.read(bArr)) != -1) {fos.write(bArr, 0, res);}System.out.println("拷贝文件成功!");} catch (IOException e) {e.printStackTrace();} finally {// 4.关闭流对象并释放有关的资源if (null != fos) {try {fos.close();} catch (IOException e) {e.printStackTrace();}}if (null != fis) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}long g2 = System.currentTimeMillis();System.out.println("使用文件流拷贝视频文件消耗的时间为:" + (g2-g1)); // 165}}
视频拷贝的三种方式分析
//``拷贝视频数据<br />``fis= ``new ``FileInputStream(``"d:/01``:什么是淘宝无货源电商``.mp4"``)``;<br />``fos = ``new ``FileOutputStream(``"d:/02``:什么是淘宝无货源电商``.mp4"``)``;<br />``System.``_out_``.println(``"``努力加载中!!!``"``)``;
// 方式一:以单个字节为单位进行拷贝,也就是每次读取一个字节后再写入一个字节// 缺点:文件稍大时,拷贝的效率很低``<br />``/*int res = 0;<br />``while ((res = fis.read()) != -1) {<br />`` fos.write(res);<br />``}*/<br />`` // 方式二:准备一个和文件大小一样的缓冲区,一次性将文件中的所有内容取出到缓冲区然后一次性写入进去// 缺点:若文件过大时,无法申请和文件大小一样的缓冲区,真实物理内存不足/*<br />``int len = fis.available();<br />``System.out.println("``文件大小是:`` "+len);<br />``byte[] barr = new byte[len];<br />``int res = fis.read(barr);<br />``System.out.println("``实际读取到的文件大小是`` "+res);<br />``*/<br />``//``方式三:准备一个相对合理的缓冲区,分批次将文件拷贝完成。<br />``// ``合理缓冲区也就是byte ``[] barr = ``new byte``[``1024``]``;<br />``int ``res = ``0``;<br />``while ``((res = fis.read(barr)) != -``1``){fos.write(barr``,``0``,``res)``;<br />``}System.``_out_``.println(``"``拷贝成功!``"``)``;
``
