Java——1.从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中 2.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录

1.从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
2.获取指定目录及子目录下所有txt文件的个数,并将这些txt文件复制到D盘下任意目录

实现代码:

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class HomeWork1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.print("请输入读取的文件路径:");
	
//		源文件夹
		File file1 = new File(sc.next());//测试路径:D:\360MoveData\Users\xucc\Desktop\aaa
		System.out.print("请输入目标文件夹路径:");
		
//		目标文件夹
		File file2 = new File(sc.next());//测试路径:D:\360MoveData\Users\xucc\Desktop\a
		copyFiles(file1 , file2);
		
//		只复制txt文件
		List<File> list = new ArrayList<>();//利用数组统计txt文件个数
		System.out.print("请输入复制txt文件目标文件夹路径:");
		copyTxtFiles(file1, new File(sc.next()),list);//测试路径:D:\\360MoveData\\Users\\xucc\\Desktop\\TXT
		System.out.println("txt文件共有"+list.size()+"个");
		sc.close();
	}
	
//	复制全部文件
	public static void copyFiles(File file1 , File file2) {
		File[] fileArr = file1.listFiles();
//		遍历源文件中的所有文件
		for(File f : fileArr) {
//			获取目标文件路径
			String filePath = file2.toString()+f.toString().substring(file1.toString().length());
			if(!f.isDirectory()) {			
				copy(f.toString(), filePath);
			}
			else {
				createFile(filePath);//如果文件是源文件的子文件夹,在目标文件中创建子文件夹
				copyFiles(f , new File(filePath));
			}
		}	
	}

//	创建文件夹
	public static void createFile(String name) {
		File newfile = new File(name);
		if(newfile.mkdir() == true)
			System.out.println("创建文件夹成功");
	}
	
//	只复制文件夹中的txt文件
	public static void copyTxtFiles(File file1 , File file2,List<File> list) {
		File[] fileArr = file1.listFiles(new JudgeTXT());
		
//		遍历源文件中的所有文件
		for(File f : fileArr) {
//			获取目标文件路径
			String filePath = file2.toString() + f.toString().substring(file1.toString().length());
			if(!f.isDirectory()) {
				list.add(f);
				copy(f.toString(), filePath);
			}else{
				createFile(filePath);//如果文件是源文件的子文件夹,在目标文件中创建子文件夹
				copyTxtFiles(f, new File(filePath),list);
			}
			
		}
	}

//	复制文件方法
	public static void copy(String sourseF , String targetF) {
//		先声明引用变量,提升作用范围
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(sourseF);
			fos = new FileOutputStream(targetF);
			byte[] buff = new byte[1024];//建立一个缓冲容器,可以一次可以读取多个字节
			int len = 0;
//			边读边写
			while((len = fis.read(buff)) != -1) {
				fos.write(buff,0,len);
				fos.flush();
			}
		} catch (IOException e) {
			System.out.println(e);
			throw new RuntimeException( "文件复制异常中断,复制失败!");
		}finally {	//关流一定要放在finally里,因为关流是一定要执行的
			try {
				if(fos!=null)		//判断fos的对象是否建立成功,,如果fos=null,就不用关流,释放资源	
					fos.close();
			} catch (IOException e) {
				throw new RuntimeException( "释放资源失败!");
			}finally {
				try {
					if(fis!=null)		//判断fis的对象是否建立成功,如果fis=null,就不用关流,释放资源
						fis.close();
				} catch (IOException e2) {
					throw new RuntimeException( "释放资源失败!");
				}		
			}
		}
	}
}

class JudgeTXT implements FileFilter{
//判断文件中有没有txt文件和文件夹,如果有,则放入File数组中
	public boolean accept(File pathname) {
		int index = pathname.toString().indexOf(".");
		String s = pathname.toString().substring(index+1);//获取文件后缀名
		if(s.equals("txt") || pathname.isDirectory())//判断文件后缀名是否是txt
			return true;		
	return false;
	}
	
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值