【Java】文件操作篇(二)字节输入流、字节输出流及常用子类(下)

简介: 文章目录写在前面1 FileInputStream文件输入流1.1 构造方法与常用方法摘要1.2 文件输入案例2 FileOutputStream文件输出流2.1 构造方法与常用方法摘要2.2 文件输出案例2.3 文件拷贝3 处理流3.1 BufferedInputStream介绍3.2 BufferedOutputStream介绍


⌨️ 参考代码及实现结果如下:

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();
            }
        }
    }
}

相关文章
|
2月前
|
安全 Java 数据库连接
【Java每日一题】——第三十五题:一个父类Animal和两个子类Rabbit和Tiger描述动物世界的继承关系两个子类吃的行为各不相同(兔子吃草,老虎吃肉)但睡觉的行为是一致
【Java每日一题】——第三十五题:一个父类Animal和两个子类Rabbit和Tiger描述动物世界的继承关系两个子类吃的行为各不相同(兔子吃草,老虎吃肉)但睡觉的行为是一致
48 0
|
2月前
|
安全 Java 数据库连接
【Java每日一题】——第三十四题:设计一个学生类Student和它的一个子类Undergraduate
【Java每日一题】——第三十四题:设计一个学生类Student和它的一个子类Undergraduate
89 0
|
2天前
|
Java
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
【JAVA基础篇教学】第十三篇:Java中I/O和文件操作
|
2天前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
18天前
|
Java API
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
Java从入门到精通:2.1.5深入学习Java核心技术之文件操作
|
5月前
|
算法 Java 程序员
火爆Boss直聘的2023最牛字节Java面试手册!助你狂拿千份offer!
当下程序员现状 根据一些调查报告,可以了解到当下程序员的现状。 首先,从年龄分布来看,年轻的程序员占据了主导地位。 30岁以下的开发者占比最高,为81%,而40岁以上的开发者仅占3%。 这意味着,程序员这个行业在一定程度上是年轻化的,同时也面临着一些中年转行或者技术更新换代的问题。 在性别方面,男性程序员的比例在90%以上,女性程序员的比例较低。 这可能和传统观念中将程序员视为男性职业有关。然而,随着技术的普及和女性对计算机科学的兴趣逐渐提高,女性程序员的比例也在逐渐增加。 从职业发展来看,程序员的职业发展相对较慢。 虽然程序员的薪资普遍较高,但是工作压力也很大,需要不断学习和更
93 0
|
5月前
|
Java
【文件操作】Java -操作File对象
【文件操作】Java -操作File对象
35 0
|
2月前
|
Java
Java——子类的继承性
Java——子类的继承性
12 0
|
3月前
|
存储 缓存 Java
Java文件操作
Java文件操作
38 0
|
4月前
|
Java 编译器
【JAVA面向对象编程】--- 探索子类如何继承父类
【JAVA面向对象编程】--- 探索子类如何继承父类
19 0