⌨️ 参考代码及实现结果如下:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; /** * @author 兴趣使然黄小黄 * @version 1.0 */ public class FileCopyTest { public static void main(String[] args) { String filePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\石原里美.jpg"; String newFilePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\石原里美副本.jpg"; boolean flag = copyFile(filePath, newFilePath); System.out.println("文件拷贝情况: " + flag); } /** * 拷贝文件的方法 * @param filePath 旧文件路径 * @param newFilePath 拷贝后文件存储路径 * @return true代表拷贝成功, false代表拷贝失败 */ public static boolean copyFile(String filePath, String newFilePath){ //1.创建文件输入流,将文件读入程序 //2.创建文件输出流,将数据输出文件 FileInputStream fileInputStream = null; FileOutputStream fileOutputStream = null; try { fileInputStream = new FileInputStream(filePath); fileOutputStream = new FileOutputStream(newFilePath, true); //3.定义一个数组,提高读取效果 byte[] buff = new byte[1024]; int readLen = 0; while ((readLen = fileInputStream.read(buff)) != -1){ //4.读取到后,就写入一部分,边读边写 //5.注意每次写入限制长度,否则,可能出现文件损失 fileOutputStream.write(buff, 0, readLen); } } catch (IOException e) { e.printStackTrace(); return false; } finally { try { //6.释放资源 if (fileInputStream != null) { fileInputStream.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); return false; } } return true; } }
可以看到,控制台显示文件拷贝成功,打开对应副本文件,图片显示正常。
🐟 说明:
在文件拷贝的时候需要特别注意,每次写入字节数组的时候需要限制大小,如果不进行限制,则会出现写入的数据量大于字节数组实际长度的情况,导致出现文件损失!
3 处理流
3.1 BufferedInputStream介绍
BufferedInputStream是字节流,在创建BufferedInputStream的时候,会创建一个内部缓冲区数组
🐯 方法摘要:
3.2 BufferedOutputStream介绍
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
🐰 方法摘要:
3.3 缓冲流拷贝图片
与前面的案例一样,不同的是,这次我们使用字节缓冲流进行图片的拷贝!
⌨️ 参考代码:
具体见注释:
import java.io.*; /** * @author 兴趣使然黄小黄 * @version 1.0 * 字符缓存流复制文本文件演示 */ public class BufferedCopyTest { public static void main(String[] args) { String srcFilePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\石原里美.jpg"; String destFilePath = "D:\\Ideaproject2021\\JavaSE\\src\\IOchapter\\石原里美副本(2).jpg"; BufferedInputStream bufferedInputStream = null; BufferedOutputStream bufferedOutputStream = null; try { //创建流对象 bufferedInputStream = new BufferedInputStream(new FileInputStream(srcFilePath)); bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(destFilePath)); //读取,边读边写 byte[] buff = new byte[1024]; int readLength = 0; while ((readLength = bufferedInputStream.read(buff)) != -1){ bufferedOutputStream.write(buff, 0, readLength); } } catch (IOException e) { e.printStackTrace(); } finally { //释放资源 try { if (bufferedInputStream != null){ bufferedInputStream.close(); } if (bufferedOutputStream != null){ bufferedOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } }