文件拷贝(字节流和字符流练习)

该文章介绍了一个Java程序,用于模拟操作系统的copy命令,实现文件从一个路径到另一个路径的拷贝。程序通过FileInputStream和FileOutputStream进行字节流操作,处理文件的读取和写入。为了应对大文件拷贝,代码采用了分块读写的方式,避免一次性加载整个文件导致内存问题。
摘要由CSDN通过智能技术生成

文件拷贝

在操作系统里面有一个copy命令,这个命令的主要功能是可以实现文件的拷贝处理,现在要求模拟这个命令,通过初始化参数输入拷贝的源文件路径与拷贝的目标路径实现文件的拷贝处理。

需求分析:
‒ 需要实现文件的拷贝操作,那么这种拷贝就有可能拷贝各种类型的文件,所以肯定使用字节流
‒ 在进行拷贝的时候有可能需要考虑到大文件的拷贝问题

实现方案:
‒ 方案一:使用InputSream将全部要拷贝的内容直接读取到程序里面,而后一次性的输出到目标文件
‒ 如果现在拷贝的文件很大,基本上程序就死了
‒ 方案二:采用部分拷贝,读取一部分输出一部分,如果现在要采用第二种做法,核心的操作方法
‒ InputSream:public int read​(byte[] b)throws IOException
‒ OutputStream:public void write​(byte[] b,int off,int len)throws IOException

package 字节流和字符流;

import java.io.*;

public class FileTest02 {
    public static void main(String[] args) throws Exception {
        File file = new File("."+File.separator+"字节流和字符流"+File.separator+"成都数据.txt");
        File file2 = new File("."+File.separator+"字节流和字符流"+File.separator+"成都数据2.txt");
        long start = System.currentTimeMillis();
        FileUtil03 fileUtil03 = new FileUtil03(file,file2);
        System.out.println(fileUtil03.copy()?"文件拷贝成功":"文件拷贝失败");
        long end = System.currentTimeMillis();
        System.out.println("拷贝完成时间:"+(end-start));
    }
}
class FileUtil03{
    private File srcfile;
    private File desFile;

    public FileUtil03(String src,String des){
        this(new File(src),new File(des));
    }
    public FileUtil03(File srcfile,File desFile){
        this.srcfile = srcfile;
        this.desFile = desFile;
    }
    public boolean copy()throws Exception{
        if (!this.srcfile.exists()) {
            System.out.println("拷贝的源文件不存在");
            return false;
        }if (!desFile.getParentFile().exists()){
            this.desFile.getParentFile().mkdirs();
        }
        byte[] bytes =new byte[1024];
        InputStream inputStream = null;
        OutputStream outputStream =null;
        try {
            inputStream = new FileInputStream(this.srcfile);
            outputStream = new FileOutputStream(this.desFile);
            int len =0;
            while ((len =inputStream.read(bytes))!=-1){
                outputStream.write(bytes,0,len);
            }
            return true;
        }catch (Exception e){
            throw e;
        }finally {
            if (inputStream != null){
                inputStream.close();
            }
            if (outputStream!=null){
                outputStream.close();
            }
        }

    }

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值