通过递归来拷贝文件(使用控制台输入参数+bat处理文件快速运行)

本文介绍了如何结合递归、IO流和控制台参数来实现文件的批量拷贝。通过创建bat批处理文件,可以方便地在任意位置执行拷贝操作。只需在控制台输入文件路径或在java源文件中修改,即可实现文件的快速拷贝。此外,还讲解了如何将bat文件加载到任务栏,实现一键拷贝的功能。

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

知识点:

递归

IO流

控制台传参

bat处理文件

将bat文件加载到任务栏(一键拷贝)


使用控制台传参方法拷贝文件:(路径可在控制台输入也可在java源文件中修改)

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class CopyDir {

	public static void main(String[] args) throws IOException {		
		String pathFrom = "";
		String pathTo = "";
		// 在控制台运行文件时传参,省去了编译过程
		if (args.length == 2) { 
			pathFrom = args[0];
            pathTo = args[1];			  
        } else{
        	// 手动指定路径,需要进行编译再运行
        	pathFrom = "D:/MyEclipse/Web/WebFrom";
			pathTo = "F:/software/apache-tomcat-7.0.42/webapps/WebFrom";
        }
		
		File dir = new File(pathFrom);
		File destDir = new File(pathTo);
		
		// 当拷贝的路径已经存在文件时,先将文件夹删除再拷贝
		if(destDir.exists()){
			deleteDir(destDir);
		}
		
		destDir.mkdir();
		copyDir(dir, destDir);
		
		Date date = new Date(); 
		SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss") ; 
		String time = dateFormat.format(date);  
		
		System.out.println("拷贝成功  " + time);
	}

	private static void deleteDir(File dir) {
		File[] files = dir.listFiles();
		for(File file : files){
			if(file.isFile()){
				file.delete();
			}else if(file.isDirectory()){
				deleteDir(file);
			}
		}
		dir.delete();
	}

	private static void copyDir(File dir, File destDir) throws IOException {
		File[] files = dir.listFiles();
		for(File file:files){
			if(file.isFile()){
				File newFile = new File(destDir,file.getName());
//				file.renameTo(newFile); // 剪切文件
				copyFile(file, newFile); // 拷贝文件
			}else if(file.isDirectory()){
				File subDestDir = new File(destDir,file.getName());
				subDestDir.mkdir();
				copyDir(file,subDestDir);
			}
		}		
	}

	private static void copyFile(File file, File newFile) throws IOException {
		FileInputStream fileInputStream = new FileInputStream(file);
		FileOutputStream fileOutputStream = new FileOutputStream(newFile);
		BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
		BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
		
		int content = 0;
		while ((content = bufferedInputStream.read()) != -1) {
			bufferedOutputStream.write(content);
		}
		bufferedOutputStream.close();
		bufferedInputStream.close();
	}

}

使用bat处理快速运行文件:

1.新建bat文件

2.输入命令行

d:
cd D:\Java\file (进入class文件所在目录,这样bat文件可以在任意位置都能执行)
java CopyDir D:\MyEclipse2016\Web\WebRoot F:\software\apache-tomcat-7.0.42\webapps\Web (改变路径只需修改参数)

3.保存文件


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


递归:

/*
 递归:函数的自身调用函数的自身 (从后面结束到前面)
 
 递归的使用前提:必须要有条件的情况下调用。
 
 需求: 算出5的阶乘。 5! = 5*4 *3 * 2*1 
 */
public class Demo {

	public static void main(String[] args) {
		int result = print(5);
		System.out.println("结果:"+ result);
	}
	
	public static int print(int num){
		if(num == 1){
			return 1;
		}else{
			return num*print(num-1);
		}
	}
	
	public static int test(int num){
		int result  =  1;
		while(num>0){
			result = result*num;
			num--;
		}
		return result;
	}
}



/*
 需求1:列出一个文件夹的子孙文件与目录。
 
 需求2:列出指定目录中所有的子孙文件与子孙目录名,要求名称前面要有相应数量的空格:
		第一级前面有0个,第二级前面有1个,第三级前面有2个...,以此类推。

 需求3:|--src
		|   |--cn
		|   |   |--itcast
		|   |   |   |--a_helloworld
		|   |   |   |   |--HelloWorld.java
		|   |   |   |--b_for
		|   |   |   |   |--ForTest.java
		|   |   |   |--c_api
		|   |   |   |   |--Student.java
		|--bin
		|   |--cn
		|   |   |--itcast
		|   |   |   |--i_exception
		|   |   |   |   |--ExceptionTest.class
		|   |   |   |--h_linecount
		|   |   |   |   |--LineCounter3.class
		|   |   |   |   |--LineCounter2.class
		|   |   |   |   |--LineCounter.class
		|--lib
		|   |--commons-io.jar

 需求4: 删除一个非空的文件夹。 
 */
import java.io.File;

public class Demo {
	
	public static void main(String[] args) {
	/*	File dir = new File("F:\\project\\day");
		listFiles3(dir,"|--");*/
		
		File dir = new File("F:\\aa");
		deleteDir(dir);
	}
	
	//删除了一个非空的目录
	public static void deleteDir(File dir){ // bb
		File[] files = dir.listFiles(); //列出了所有的子文件
		for(File file : files){
			if(file.isFile()){
				file.delete();
			}else if(file.isDirectory()){
				deleteDir(file);
			}
		}
		dir.delete(); // 删除最后留下的空文件夹
	}
	
	//列出一个文件夹的子孙文件与目录,要求要是树状结构
	public static void listFiles3(File dir,String space){ //space 存储的是空格
		File[] files = dir.listFiles(); //列出所有 的子文件
		for(File file : files){
			if(file.isFile()){
				System.out.println(space+file.getName());
			}else if(file.isDirectory()){
				System.out.println(space+file.getName());
				listFiles3(file,"|   "+space);
			}	
		}
	}
	
	//列出一个文件夹的子孙文件与目录,要求名称前面要有相应数量的空格。
	public static void listFiles2(File dir, String space){ //space 存储的是空格
		File[] files = dir.listFiles(); //列出所有 的子文件
		for(File file : files){
			if(file.isFile()){
				System.out.println(space+file.getName());
			}else if(file.isDirectory()){
				System.out.println(space+file.getName());
				listFiles2(file,"  "+space);
			}
		}
	}
	
	//列出一个文件夹的子孙文件与目录。
	public static void listFiles1(File dir){
		File[] files = dir.listFiles(); //列出所有的子文件
		for(File file : files){
			if(file.isFile()){
				System.out.println("文件名:"+file.getName());
			}else if(file.isDirectory()){
				System.out.println("文件夹:"+file.getName());
				listFiles1(file);
			}	
		}	
	}
	
}



bat处理文件:

/*
 快速启动java图形化文件:(jar文件)
	1.进入文件目录 (cd Java)
	2.对java源文件进行编译:javac -d . java源文件 (javac -d . Demo.java)
	3.对java文件进行打包:jar cvf jar包名 java文件名 (jar cvf Text.jar aa)
	4.修改清单文件:Main-Class: 包名+类名 (Main-Class: aa.bb.cc.Demo)
 
 bat处理文件: bat处理文件就是可以一次性执行多个命令的文件。
 
 为什么要学bat处理文件, 快速运行一个软件我一般都会把软件打包一个jar包。
 
 jar双击可以运行仅对于图形化界面的软件起作用,对于控制台的程序是不起作用的。
 对于控制台的程序我们可以使用bat处理文件快速启动一个项目。
 
 如何编写bat处理文件呢? (控制台程序和图形化程序) 
 	步骤: 编写一个自定义的文本文件,然后把后缀名改成bat即可,然后把你所要执行的命令写在bat处理文件中即可。
	javac -d . Demo.java(bat+源文件)
	java aa.bb.cc.Demo
	pause

 执行压缩包里的class文件:(找不到主类)
	1.设置临时环境变量(set classpath=d:\Java\text.zip)对本控制台有效
	2.指定类文件路径(java -classpath .\text.zip; aa.bb.cc.Demo)对本次有效(bat+zip、jar的class文件)
 	
bat处理文件常用的命令:
	echo     向控制台输出指定的内容
	echo off 隐藏echo off后面执行过的命令
	@        隐藏当前行执行的命令
	title    改变当前控制台窗口的标题
	color    指定控制台的背景颜色与前景颜色
	%注释的内容%
	pause:   让当前控制台停留
	%1~%9:   给bat处理文件传入参数(传参只能用控制台输入参数:bat文件名 参数)
 */

将bat文件加载到任务栏(一键拷贝)

/*
 将CopyDir.bat 改名为CopyDir.exe
 将修改后的CopyDir.exe拉到任务栏
 将修改后的CopyDir.exe修改回CopyDir.bat
 找到C:\Users\acer\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar路径下的CopyDir.exe文件
 右键点击CopyDir.exe文件--属性,将目标文件路径的后缀名exe改为bat
 点击确定
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值