A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 曲终烟尽 于 2015-6-2 09:29 编辑

我觉的看有代码的帖子要有诚意,所以设置了隐藏。主要实现隐藏了,回复就可以看到。如果连回复都没有,说明你不想看到代码,也就说明你没兴趣,可能你已经是高手不屑回复查看,也可能你没时间。这正是我设置隐藏的主要目的。我要的是和我一样的新手,能交流的对研究代码有兴趣的朋友来看的。

写了一个删除指定目录和格式文件的程序,请大家指点指点,优化一下。
目前没学到多线程,没学到动态列表。所以没用这些功能。但觉得代码还可以进行大规模优化和扩展。
以后想做成文件管理器的核心类。必须要有删除功能,所以这是基础功能,还有其他,比如复制,剪切,查看目录,返回上级目录,文件属性修改等等。。。
目前只实现了 给点目录和 指定 格式后,进行删除。
至于网上的我没搜索,为了练习自己学到的知识。
原来用python做过类似文件夹管理器的东西。思路是相同的。用递归实现的目录扫描。不知有没有更好的方法。
代码如下:
FileCleaner.java
  1. package com.FileCleaner;

  2. /**
  3. * 文件清理
  4. * 对指定格式的文件进行清理,不删除目录
  5. * @author CJH
  6. * @version V1.0
  7. */
  8. public class FileCleaner {
  9.         public static void main(String[] args)
  10.         {
  11.                 String sourcePath="d:\\test";//指定待清理目录
  12.                 String[] ext=new String[]{"txt","class"};//指定待删除的文件格式后缀
  13.                 FileMan fm=FileMan.getInstance(sourcePath, ext);//获取实例引用
  14.                 fm.clean();//调用清理功能
  15.         }

  16. }
复制代码
功能类:FileMan.java
package com.FileCleaner;

import java.io.File;

public class FileMan implements FileManBase
{
        
        private static FileMan fm;
        
        private String fPath;
        private String[] delList;
        private String[] extList;
        
        //private FileMan(){}
        /**
         * 构造函数,构造对象并初始化内部参数
         * @param fPath 目录路径
         * @param extList 过滤文件格式列表
         */
        private FileMan(String fPath,String[] extList)
        {
                if(this.extList==null)
                        this.extList=extList;
                if(this.fPath==null)
                        this.fPath=fPath;
        }
        /**
         * 该方法使用传入的参数创建一个FileMan的实例,并返回,保证只有一个实例存在
         * @param fPath 要进行扫描的目录路径
         * @param ext 过滤的将删除的文件类型,例如: String[] {"exe,tmp,jpg"}
         * @return 返回FileMan 实例的引用
         */
        public static FileMan getInstance(String fPath,String[] ext){
                if(fPath==null||ext==null){
                        System.out.println("错误的参数:传入空值.");
                        System.exit(1);
                }
                if(fm==null)//如果实例不存在,则创建实例
                        fm=new FileMan(fPath,ext);
                return fm;//返回实例的引用
        }
        @Override
        /**
         * 该函数对对象的源路径进行检查,如果是文件夹就调用searchDir(File)进行遍历
         * 如果不是文件夹就 提示并 返回
         */
        public String[] clean() {
                // TODO Auto-generated method stub
               
                File myFile;
                myFile=new File(fPath);
                if(myFile.isDirectory())
                {
                        speak("*********进入源路径:"+fPath+"**********");
                        searchDir(myFile);
                }
                else
                        speak("**!!!!!参数错误,应该传入目录路径而不是文件路径.");

                return null;
        }
        /**
         * 目录搜索,该方法接受一个源目录,之后对这个目录进行遍历,如果是目录就调用自身进行递归
         * 如果是文件就调用checkFileExt(File)进行文件检查
         * @param file 接受一个目录文件
         */
        private void searchDir(File file){
        
                File[] allList=file.listFiles();
               
               
                for(int i=0;i<allList.length;i++){//对文件进行遍历
                        if(allList.isDirectory())//如果是文件夹就进行递归扫描
                        {
                                speak("发现目录:"+allList);
                                searchDir(allList);//进入递归
                        }
                        else//如果不是文件夹那么就检查该文件的格式
                        {
                                checkFileExt(allList);
                        }

                }
        }
        /**
         * 对传入的文件的名称进行解析并分析是否符合extList内指定类型的文件
         * 如果符合,就调用deleteFile(File df)进行删除操作
         * @param file 接收一个File类型文件,指定要进行检测解析的文件
         */
        private void checkFileExt(File file)
        {
               
                String fp=file.getPath();
                String fname=file.getName();
                String[] fnames=fname.split("\\.");
                speak("解析文件:"+fp);
                speak("文件名:"+fname);
                if(fnames.length==0)
                {
                        speak("文件无格式:"+fname);
                        return;
                }
                String fext=fnames[fnames.length-1];
                speak("文件类型:"+fext);
                for(int i=0;i<extList.length;i++)
                {
                        speak("类型对比:"+fext+"=?="+extList);
                        if(fext.equals(extList)){
                                deleteFile(file);
                        }
                }
        }

        
        /**
         * 保存删除失败的文件到列表内
         * @param ff 接受一个清理失败的File对象
         * */
        private void addFail(File ff) {
                // TODO Auto-generated method stub
               
        }
        
        @Override
        public void deleteFile(File df) {
                // TODO Auto-generated method stub
                speak("尝试删除:"+df.getName());
                if(df.delete()){
                        speak("[成       功]:"+df.getPath());
                }
                else
                {
                        addFail(df);
                        speak("*失败*:"+df.getPath());
                }

        }
        public void speak(String str)
        {
                System.out.println(str);
        }
}
-----------------------------------------------------------------------------------------------------------
文件:FileManBase.java

package com.FileCleaner;

import java.io.File;

public interface FileManBase {
        /**
         * 清理指定目录内的每个目录下包括子目录内的 指定格式 文件
         * @param fPath 接收一个String类型起始目录列表,
         * @param ext 接受一个String[] 数组类型列表,进行文件格式筛选,例如["tmp","jpg","mp4"]
         * @return 返回一个 File[] 数组,内含清除失败的File对象.
         * */
        public abstract String[] clean();//清理文件功能
        /**
         * 显示正在发生的操作的通知信息.
         * @param str 接收文本通知并显示
         */
        public abstract void speak(String str);//显示通知内容
        /**
         * 删除指定的文件
         * @param df 接受一个File型对象,该File对象指定要删除的文件
         */
        public abstract void deleteFile(File df);
}







1 个回复

倒序浏览
回复看内容
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马