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

来源:互联网 发布:湘北vs山王工业数据 编辑:程序博客网 时间:2024/04/27 21:27

知识点:

递归

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){ // bbFile[] 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.Demopause 执行压缩包里的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 点击确定*/


0 0
原创粉丝点击