IO流完成文件夹及里面的文件Copy

本文介绍了一种在Java中实现文件夹及其内部文件拷贝的方法。通过递归方式处理文件夹,确保所有子文件夹和文件都能被正确复制到目标位置。代码详细展示了如何使用FileInputStream和FileOutputStream进行文件流的读写操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过输入源地址,和目标地址完成文件夹及里面文件的拷贝

public static void main(String[] args) {
    copy("D:\\Temp","D:\\java\\123");
        //第一个字符串为源,第二个字符串为目标地址
    }
    /**
     *文件夹,或者文件的拷贝
     * @param s  copy resours
     * @param s1  tagert path
     */
private static void copy(String s, String s1) {

    File file1 = new File(s);
		//创建源的File对象
		
    File[] f = file1.listFiles();
		//获取源文件路径下所有子文件及文件夹
        
        //使用for循环对源进行遍历,当f下元素个数为0时,for不执行
    for(File ff:f){
    	//获取目标文件夹下,对应源文件夹下的绝对路径
        File file3 = new File(s1+"\\"+ff.getName());
        //判断是否为文件夹
        if(ff.isDirectory()){
            //创建对应的文件夹
            //如果还有文件夹,递归,直到没有文件夹或只有文件
            copy(ff.getAbsolutePath(),s1+"\\"+ff.getName());
            //判断是否已经存在
            if(!file3.exists()){
                    file3.mkdirs();//在目标地址下创建对应的文件夹
            }
        }else {
           //如果不是文件夹,即文件,通过文件流进行拷贝
            FileInputStream fin= null;
            FileOutputStream fout = null;
            try {
                fin = new FileInputStream(ff.getAbsoluteFile());
                fout = new FileOutputStream(file3.getAbsoluteFile());

                int count =0;
                byte[] bytes = new byte[1024*1024];
                while ((count = fin.read(bytes) )!= -1){
                    fout.write(bytes,0,count);
                }//刷新
                fout.flush();
            } catch (FileNotFoundException e) {
                    e.printStackTrace();
            } catch (IOException e) {
                    e.printStackTrace();
            }finally {
            //关闭流
                 if (fin != null) {
                     try {
                     fin.close();
                     } catch (IOException e) {
                     e.printStackTrace();
                     }
                 }
                 if (fout != null) {
                     try {
                     fout.close();
                     } catch (IOException e) {
                          e.printStackTrace();
                     }
                }
            }
        }
    }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值