java基础之文件的复制,删除,剪切(利用递归)

上一篇文章已经分享了关于流的基础内容,下面就来实战一下

文件的复制

package cn.bzu.look.dao;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyFileTest {
	public static void main(String[] args) {
		CopyFileTest cft = new CopyFileTest();
		//路径名最好不要有中文路径,有的话在写的时候会报找不到路径的错误(这里小编已经试了很多次了)
		File file = new File("G:\\FileTest");
		cft.copyFiles(file, "D:");
	}
	//复制文件的方法
	public void copyFiles(File file, String path) {
		String oldPath = file.getAbsolutePath();
		//获得新文件的路径
		String newPath = path+oldPath.split(":")[1];
		File newFile = new File(newPath);
		FileInputStream fis = null;
		FileOutputStream fos = null;
		//如果file是个文件,得到的结果是null,如果file是个空目录,则返回的是一个空数组,如果不是空目录,则返回是目录下面的文件和目录
		File[] files = file.listFiles();
		try {
			if (files != null) {
				// 说明他是目录,则创建目录
				newFile.mkdir();
				System.out.println( file.getName()+"目录复制成功");
				if (files.length > 0) {
					for (File f : files) {
						copyFiles(f, path);	
					}
				}
			} else {//说明file是个文件,则直接写入
				fis = new FileInputStream(file);
				fos = new FileOutputStream(newFile);
				// 说明他是文件,直接读取然后写入
				byte[] bytes = new byte[1024];
				int count = fis.read(bytes);
				while (count != -1) {
					//将读取到的内容写到文件中
					fos.write(bytes, 0, count);
					fos.flush();
					count = fis.read(bytes);
				}
				System.out.println(file.getName()+"文件复制成功");
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(fis!=null) {
				try {
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(fos!=null) {
				try {
					fos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}

输出结果

FileTest目录复制成功
jiangheng.txt文件复制成功
out目录复制成功
inner目录复制成功
innerA目录复制成功
innerInner.txt文件复制成功
innerA.txt文件复制成功
inner.txt文件复制成功
outDirec目录复制成功
hengheng.txt文件复制成功
InnerB目录复制成功

复制是从文件最顶层开始复制。

文件的删除

public void deleteFiles(File file) {
		File[] files = file.listFiles();
		
		if(files!=null&&files.length>0) {
			for(File f: files) {
				deleteFiles(f);
			}
		}
		file.delete();
		System.out.println("删除成功"+file.getName());
	}
	

在main方法中直接调用就行


public static void main(String[] args) {
		CopyFileTest cft = new CopyFileTest();
		File file1 = new File("D:\\FileTest");
		cft.deleteFiles(file1);
	}

文件的剪切

在main方法中先调用复制的方法,在调用删除的方法,这样就实现了剪切

public static void main(String[] args) {
		CopyFileTest cft = new CopyFileTest();
		File file = new File("G:\\FileTest");
		File file1 = new File("G:\\FileTest");
		cft.copyFiles(file, "D:");
		cft.deleteFiles(file1);
	}

输出结果是:

FileTest目录复制成功
jiangheng.txt文件复制成功
out目录复制成功
inner目录复制成功
innerA目录复制成功
innerInner.txt文件复制成功
innerA.txt文件复制成功
inner.txt文件复制成功
outDirec目录复制成功
hengheng.txt文件复制成功
InnerB目录复制成功
删除成功jiangheng.txt
删除成功innerInner.txt
删除成功innerA
删除成功innerA.txt
删除成功inner
删除成功inner.txt
删除成功out
删除成功hengheng.txt
删除成功InnerB
删除成功outDirec
删除成功FileTest

文件流的基础知识

https://blog.csdn.net/weixin_43610698/article/details/91942534

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值