Java——IO流(一)-(7/8):字节流-FileOutputStream、字节流完成文件拷贝

目录

文件字节输出流:写字节出去

构造器及常用方法

实例演示

案例:文件复制

过程分析

复制照片

复制文件


文件字节输出流:写字节出去

FileOutputStream(文件字节输出流)

  • 作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。

构造器及常用方法

构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(File file, boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath, boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
public void write(int a)写一个字节出去
public void write{byte[] buffer)写一个字节数组出去
public void write(byte[] buffer ,int pos ,int len)写一个字节数组的一部分出去。
public void close()) throws IOException关闭流。

实例演示

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

public class FileOutputStreamTest1 {
    public static void main(String[] args) throws Exception {
        //1.创建一个字节输出流管道与目标文件接通
        //覆盖管道:覆盖之前的数据
//        OutputStream os = new FileOutputStream("HelloWorld\\src\\file.txt");

        //追加数据的管道
        OutputStream os = new FileOutputStream("HelloWorld\\src\\file.txt", true);

        //2.开始写字节数据出去
        os.write(97);   //97就是一个字节,代表a
        os.write('b');  //'b'一个字节
//        os.write('森');  //汉字为三个字节,默认只能泄出去一个字节

        byte[] bytes = "我爱你中国ABC".getBytes(StandardCharsets.UTF_8);
        os.write(bytes);

        os.write(bytes,0,15);

        //换行符
        os.write("\r\n".getBytes());    //多平台适用的换行符

        os.close();     //关闭流
    }
}

运行之后file文件的内容变为:

案例:文件复制

过程分析

例如现在我们要将D盘的文件复制一份到C盘中去。

要清楚通过文件字节输入输出流来实现的话,其中间层是内存;

  1. 首先创建字节输入流管道,让这条管道从D盘输入数据到内存中去,
  2. 字节输入流管道使用read方法,存入字节数组中;
  3. 然后创建字节输出流管道,从字节数组中输出到C盘;

重复进行,直到文件复制完毕。

复制照片

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class copyFile {
    public static void main(String[] args) throws Exception{
        //需求:复制照片
        //1.创建一个字节输入流管道与源文件接通
        InputStream is = new FileInputStream("C:\\Users\\Administrator\\Pictures\\flower.jpg");

        //2.创建一个字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("C:\\Users\\Administrator\\Desktop\\test.jpg");

        //3.创建一个字节数组,负责转移字节数据
        byte[] buffer = new byte[1024];     //1KB

        //4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少
        int len;    //记住每次读取了多少个字节
        while( (len = is.read(buffer)) != -1 ){
            os.write(buffer,0,len);
        }
        os.close();  //从内到外关闭流
        is.close();
        System.out.println("复制完成!");
    }
}

复制文件

也可以复制文本文件,即便中文编码被中间截断,也可以在后面的拷贝中接上,最终还是一个完整的文件。

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class copyFile {
    public static void main(String[] args) throws Exception{
        //需求:复制文件
        //1.创建一个字节输入流管道与源文件接通
        InputStream is = new FileInputStream("HelloWorld\src\file.txt");

        //2.创建一个字节输出流管道与目标文件接通
        OutputStream os = new FileOutputStream("HelloWorld\src\filecopy.txt");

        //3.创建一个字节数组,负责转移字节数据
        byte[] buffer = new byte[1024];     //1KB

        //4.从字节输入流中读取字节数据,写出去到字节输出流中,读多少写出去多少
        int len;    //记住每次读取了多少个字节
        while( (len = is.read(buffer)) != -1 ){
            os.write(buffer,0,len);
        }
        os.close();  //从内到外关闭流
        is.close();
        System.out.println("复制完成!");
    }
}

字节流非常适合做一切文件的复制操作

任何文件的底层都是字节,字节流做复制,是一字不漏的转移完全部字节,只要复制后的文件格式一致就没问题!


END


学习自:黑马程序员——Java课程

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值