当前位置:编程学习 > JAVA >>

java学习中,写了一个删除文件的小工具,供大家一笑



import java.io.File;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

/**
 *
 * @author yjs
 */
public class DelFiles {

private static int numOfDeleteFiles = 0;
    
    public static void main(String[] args) throws IOException{
     while(true){
     System.out.println("请输入要删除文件所在的文件夹全路径,退出输入:exit。");
    System.out.print("->: ");
     String toDeleteFoldName = (new BufferedReader(new InputStreamReader(System.in))).readLine();
     if(toDeleteFoldName.equals("exit")){
     return;
     }     
     File toDelInFold = new File(toDeleteFoldName);
     if(!toDelInFold.exists())
     {
     System.out.println("你的文件夹路径输入有误,输入正确的路径。");
     }else{
     System.out.println("请输入要删除文件的文件名(多个文件以/分开),退出输入:exit。 ");
     System.out.print("->: ");
     String deleteFilesName = (new BufferedReader(new InputStreamReader(System.in))).readLine();
     if(deleteFilesName.equals("exit")){
     return;
     }
     System.out.println("*************请认真确认************");
     System.out.println("你准备删除文件夹【 " + toDeleteFoldName + " 】及其子文件夹中的文件【 " + deleteFilesName + " 】");
     System.out.println("************************************");
     boolean confirm = false;
     while(!confirm){
     System.out.println("删除的文件将无法恢复,确定请输入:yes,修改请输入:no,退出输入:exit。");
     System.out.print("->: ");
     String confirmStr = (new BufferedReader(new InputStreamReader(System.in))).readLine();
     switch(confirmStr){
     case "yes":
     confirm = true;
     String[] deleteFilesNameArray = deleteFilesName.split("/");
     deleteFiles(toDelInFold, deleteFilesNameArray);
System.out.println("=========================================");
        System.out.println("删除文件总数:" + DelFiles.numOfDeleteFiles);
        DelFiles.numOfDeleteFiles = 0;
        System.out.println("=========================================");
        System.out.println("输入任意值继续,退出请输入:exit");
     System.out.print("->: ");
        String exitOrNot = (new BufferedReader(new InputStreamReader(System.in))).readLine();
        if(exitOrNot.equals("exit")){
         return;
        }
     break;
     case "no":
     confirm = true;
     break;
     case "exit":
     return;
     default:
     break;
     }     
     }
    
     }
     }
    }
    private static void deleteFiles(File fold, String[] filesName){
        File[] inFiles = fold.listFiles();
        for(int i=0; i<inFiles.length; i++){
            if(inFiles[i].isFile()){
                String name = inFiles[i].getName();
                for(int j=0; j<filesName.length; j++){
                    if(name.equals(filesName[j])){
                        inFiles[i].delete();
                        DelFiles.numOfDeleteFiles++;
                        System.out.println("删除文件: [" + DelFiles.numOfDeleteFiles + "]" + inFiles[i].getPath());
                    }
                }
            }else{
                deleteFiles(inFiles[i], filesName);
            }
        }
    }

}
--------------------编程问答--------------------

操作这文件严格点抛出异常信息吧...不然出什么问题都不知道,删除有时候也会占用中,情况多着 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 用个filechooser会更好 --------------------编程问答-------------------- 这就是传说中的在黑屏中运行的那种吗? --------------------编程问答--------------------
引用 1 楼 shadowsick 的回复:


操作这文件严格点抛出异常信息吧...不然出什么问题都不知道,删除有时候也会占用中,情况多着


你说得很对,高手就是严谨。我当时的情况是:在网上下载了一大堆源码,有多源码的每个文件夹里都有宣传他们网站的广告文件,每次看到总想删掉,强迫症吧,呵呵,正好学习java,就想了一天多,写了这么个东东,学习的兴趣提高不少,工具确实也管用。ps:当时想到用递归,小得意了一把 --------------------编程问答--------------------
引用 3 楼 bailin710258 的回复:
用个filechooser会更好

filechooser还没学到,刚刚了解了一下,觉得这里用不是很合适吧?我是要批量删除特定文件夹及其子文件夹下面的所有相同文件名的文件,filechooser是用来选择某个文件,然后操作,对不对? --------------------编程问答-------------------- 建议用swing做能可视化的,都是jdk已有的类,自己看看就会了,没有什么学没学到的,自己干!当然偶也做过... --------------------编程问答-------------------- 挺复杂的 --------------------编程问答-------------------- 程序界面不同于后台处理,不能随意throws Exception。最好能捕获,并给用户一个合理的描述:是再次输入,还是程序终止。

另外,刚开始学习,建议多写注释,便于自己理解的同时,也能养成良好的编码习惯。 --------------------编程问答-------------------- good       , --------------------编程问答-------------------- 建议lz仿写 个windows资源管理器的demo。那个可学习不少东西,递归之类的都有了! --------------------编程问答-------------------- switch里面可以用String类型的么? --------------------编程问答-------------------- 建议楼主试试:能否把deleteFiles()这个函数改成非递归,这样有助于你透彻理解函数栈、现场保留等等原理性的知识。 --------------------编程问答-------------------- switch在jdk7里面可以有string了 --------------------编程问答--------------------
引用 14 楼 u011311392 的回复:
switch在jdk7里面可以有string了
原来是这样 --------------------编程问答--------------------
引用 12 楼 coolboyyzy 的回复:
switch里面可以用String类型的么?

可以,Java7可以了 --------------------编程问答--------------------
引用 13 楼 SmallYamateh 的回复:
建议楼主试试:能否把deleteFiles()这个函数改成非递归,这样有助于你透彻理解函数栈、现场保留等等原理性的知识。

真心不懂函数栈、现场保留等等原理性的知识
求详解
自己百度先 --------------------编程问答-------------------- 除
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,