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

相关文章
|
6月前
|
安全 Java 开发者
掌握Java文件操作,让你的代码“飞”起来!读写、复制、删除全攻略!
【6月更文挑战第27天】Java文件操作涵盖读写、复制、删除。使用NIO的`Files`类提升效率:读取文件用`newBufferedReader`实现逐行读,写入文件用`newBufferedWriter`,复制文件用`copy`方法,删除文件用`deleteIfExists`,确保安全。这些最佳实践优化了内存使用,简化了代码。
40 0
|
2月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
137 3
|
2月前
|
Java
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。
16 0
java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题
|
3月前
|
Java
Java文件操作
本文介绍了Java中`File`类的使用方法,包括构造方法、常见成员方法及其实现功能。`File`对象可以表示文件或文件夹,支持绝对路径和相对路径。构造方法有三种:基于完整路径、父级路径与子路径组合、`File`对象与字符串组合。成员方法涵盖判断类型、获取大小、获取路径、创建与删除文件/文件夹、获取文件列表、重命名等操作。文章通过示例代码详细展示了各个方法的应用场景及注意事项。
42 1
Java文件操作
|
2月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
35 0
|
4月前
|
Java
Java系列之 字符串和字节互转
这篇文章是关于Java中字符串和字节之间互转的方法,包括使用`getBytes()`方法将字符串转换为字节数组,以及使用String构造方法将字节数组转换回字符串。
|
4月前
|
Java 编译器
JAVA中的夫类与子类
JAVA中的夫类与子类
|
4月前
|
缓存 Java 数据处理
|
6月前
|
Java API
惊呆了!Java文件操作竟能如此简单:一分钟学会读写、复制、删除!
【6月更文挑战第27天】Java编程中的文件操作简单易行。使用`java.io`包中的`FileInputStream`和`FileOutputStream`进行读写,例如写文件将字符串转为字节写入,读文件则循环读取字节。文件复制涉及两个流,从源文件读取后写入目标文件。删除文件只需调用`File`对象的`delete`方法。这些基本操作让Java文件处理变得直观且易于掌握。
37 1
|
5月前
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。