posts - 241,  comments - 116,  trackbacks - 0
现在很多公司采用SVN开发,其版本管理的确很不错.
但是有一点很让人郁闷,就是源代码的.svn文件会很多,而且当Java源码代或者配置文件改变多次时,会生成很多版本,svn的大小可能是源代码的N倍.
如果想把某个目录的svn文件去掉,可以自己写个程序去删除.svn目录下的所有文件.方便又时用,我这里采用的是commons-io.jar 里的 DirectoryWalker,看到名称就能理解“目录散步”。
废话不说了,代码如下:
package com.ycl.filter.FileCleaner;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.apache.commons.io.DirectoryWalker;

public class FileCleaner extends DirectoryWalker {

    public FileCleaner() {
        super();
    }

    public List<File> clean(File startDirectory) throws IOException {
        List<File> results = new ArrayList<File>();
        walk(startDirectory, results);
        return results;
    }

    @Override
    protected void handleStart(File startDirectory, Collection results)
            throws IOException {
        System.out.println("-------开始清除-------");
    }

    @Override
    protected void handleEnd(Collection results) throws IOException {
        System.out.println("-------结束清除-------");
    }

    @Override
    protected void handleCancelled(File startDirectory, Collection results,
            CancelException cancel) throws IOException {
        System.out.println("-------清除异常-------");
        super.handleCancelled(startDirectory, results, cancel);
    }

    @Override
    protected boolean handleIsCancelled(File file, int depth, Collection results)
            throws IOException {
        //这里可以设置断点,比如当你找到某个类的时候,停止遍历,默认继续
        return false;
    }

    @Override
    protected void handleDirectoryStart(File directory, int depth,
            Collection results) throws IOException {
    //    System.out.println("****开始处理:"+directory.getName()+"deep:"+depth+"results:"+results.toString());
    }

    @Override
    protected void handleDirectoryEnd(File directory, int depth,
            Collection results) throws IOException {
    //    System.out.println("****结束处理:"+directory.getName()+"deep:"+depth+"results:"+results.toString());
    }

    @Override
    protected void handleRestricted(File directory, int depth,
            Collection results) throws IOException {
        System.out.println("****受限制目录:"+directory.getName()+"deep:"+depth+"results:"+results.toString());
    }

    /**
     * 是否处理某个目录.返回false 不处理
     *
     * @see 这里直接删除.svn.然后不处理.
     */
    @Override
    protected boolean handleDirectory(File directory, int depth,
            Collection results) {
        // delete svn directories and then skip
        if (".svn".equals(directory.getName())) {
            deleteDirectory(directory,results);
            return false;
        } else {
            results.add(directory);//删除.svn,还有哪些文件夹
            return true;
        }

    }

    /**
     * 删除文件,并把文件加到删除列表中
     */
    @Override
    protected void handleFile(File file, int depth, Collection results) {
        // delete file and add to list of deleted
        //file.delete();
        //results.add(file);
        //删除.svn文件后,还有哪些文件
    }

    /**
     * 删除目录及目录下的文件夹和文件
     * @param directory
     * @param results
     */
    private void deleteDirectory(File directory,Collection results){
        if(directory.isDirectory()){
            File[] list = directory.listFiles();
            for(File file:list){
                deleteDirectory(file,results);
            }
        }
        Log(directory.delete(),directory);
        results.add(directory);//删除文件
    }

    /**Tp-Link教程
     * 删除文件或者目录失败日志
     * @param flag
     */
    private void Log(boolean flag,File directory){
        if(!flag){
            System.err.println("删除文件失败:"+directory.getAbsolutePath());
        }else{
            System.out.println("delete:"+directory.getAbsolutePath());
        }
    }iphone5
}
测试代码如下:
package com.ycl.filter.FileCleaner;

import java.io.File;
import java.io.IOException;
import java.util.List;

public class TestFileCleaner {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        FileCleaner cleaner = new FileCleaner();
        File startDirectory = new File("D:\\workspace\\branches\\pamirsshop_branches_8-30");
        List<File> list = cleaner.clean(startDirectory);
        for(File file:list){
        //    System.out.println("file:"+file.getAbsolutePath());
        }
        System.out.println("共处理"+list.size()+"个文件");

    }
}
posted on 2011-06-21 10:24 墙头草 阅读(225) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 
人人游戏网 软件开发网 货运专家