Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 删除硬盘下所有的"_desktop.ini"文件
【标  题】:删除硬盘下所有的"_desktop.ini"文件
【关键字】:_desktop.ini
【来  源】:http://blog.csdn.net/catking668/archive/2006/09/26/1289529.aspx

删除硬盘下所有的"_desktop.ini"文件

Your Ad Here

前几天中了个病毒..杀毒软件自动杀了.我也忘记了什么病毒了

不过今天才发现病毒没清理干净.每个文件夹下还留下一个文件名为"_desktop.ini"的文件

难道要我一个一个的删?no way...

作为一个程序爱好者.当然是自己动手.丰衣足食了

以下是代码:

 

package cat.io;

import java.io.File;
import java.io.FileFilter;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Stack;

/**
 * 删除硬盘目录下所有的目标文件
 * 
 * 
@author cat lee
 * 
@version $Id: TraverseDrivers.java,v 1.0 2006/08/04 21:09:34 cat Exp $
 
*/

public class TraverseDrivers {
    
    
private static final int FIND_SUB = 0// 子目录

    
private static final int FIND_SIB = 1// 兄弟目录

    
private static final int FIND_END = 2// 结束
    
    
public static void main(String[] args) {
        
        Calendar time 
= Calendar.getInstance();
        StringBuffer sb 
= new StringBuffer();
        sb.append(
"启动时间 : " + time.getTime());
        
        String fileName 
= "_desktop.ini";
        
long matchFilesCount = 0L;
        
        File[] roots 
= File.listRoots(); //列出所有根目录
        
//String fileName = args[0] ? "_desktop.ini" : args[0];
        for (int i = 0; i < roots.length; i++{
            System.out.println(roots[i].getAbsolutePath());
            Set
<File> files = findFiles(roots[i], fileName);
            matchFilesCount 
+= files.size();        
            
for (Iterator<File> targetFiles = files.iterator(); targetFiles
                    .hasNext();) 
{
                targetFiles.next().delete();
//删除所有目标文件
            }

        }

        sb.append(
"结束时间 : " + time.getTime());
        sb.append(
"共找到文件 : " + matchFilesCount + "");
        
    }


    
public static Set<File> findFiles(File root, String fileName) {
        Stack
<File> directories = new Stack<File>();
        directories.push(root);
        
return findFiles(directories , fileName);
    }


    
/**
     * 找出所有符合条件的文件
     * 
@param directories 目录
     * 
@param fileName 目标文件名
     * 
@return
     
*/

    
public static Set<File> findFiles(Stack<File> directories, String fileName) {
        
        TargetFileFilter fileFilter 
= new TargetFileFilter(fileName);
        DirFilter dirFilter 
= new DirFilter();
        
        
int status = FIND_SUB; 
        Set
<File> foundFiles = new HashSet<File>();//找到的文件
        while (status != FIND_END) {
            File dir 
= (File) directories.pop(); // 当前目录
            
            
if (status == FIND_SUB) // 查找子目录
                File[] subDirs = dir.listFiles(dirFilter);
                
if (subDirs == null || subDirs.length == 0// 没有子目录
                    directories.push(dir);
                    status 
= FIND_SIB; // 查找兄弟目录
                }
 else {
                    directories.push(dir);
                    directories.push(subDirs[
0]);
                    status 
= FIND_SUB;
                }

            }
 else if (status == FIND_SIB) // 查找兄弟目录
                File[] files = dir.listFiles(fileFilter);
                
if (files != null{
                    
for (int i = 0; i < files.length; i++{
                        foundFiles.add(files[i]);
//其实在这里已经可以执行删除操作了
                    }

                }

                
if (directories.isEmpty()) {
                    status 
= FIND_END; // 查找结束
                }
 else {
                    File parentDir 
= (File) directories.peek();
                    File[] sibDirs 
= parentDir.listFiles(dirFilter);
                    
for (int i = 0; i < sibDirs.length; i++{
                        
if (dir.equals(sibDirs[i])) {
                            
if (i + 1 < sibDirs.length) // 存在兄弟目录
                                directories.push(sibDirs[i + 1]);
                                status 
= FIND_SUB; // 需要查找子目录
                            }
 else // 最后一个兄弟目录
                                status = FIND_SIB;
                            }

                            
break;
                        }

                    }

                }

            }

        }

        
return  foundFiles;
        
    }

    
/**
     * 目录过滤器
     * 只检测目录
     * 
@author cat lee
     *
     
*/

    
private static class DirFilter implements FileFilter {
        
public boolean accept(File pathName) {
            
return (pathName != null&& pathName.isDirectory();
        }

    }


    
/**
     * 目标文件名过滤器
     * 
     * 
@author cat lee
     *
     
*/

    
private static class TargetFileFilter implements FileFilter {
        String targetFileName;

        TargetFileFilter(String targetFileName) 
{
            
this.targetFileName = targetFileName;
        }


        
public boolean accept(File pathName) {
            
return (pathName != null&& pathName.isFile()
                    
&& targetFileName.equalsIgnoreCase(pathName.getName());
        }

    }

}

 

自己写程序删除纯粹是为了好玩.这个算法其实只是在网上找来的.我自己修改了一下

其实可以写个批处理来删除

@echo off
echo 删除文件中
del c:\\_desktop.ini /f/s/q/a
del d:\\_desktop.ini /f/s/q/a
del e:\\_desktop.ini /f/s/q/a
del f:\\_desktop.ini /f/s/q/a
echo 删除完毕
exit

一个针对文件数据处理的应用框架:【上一篇】
提高Eclipse速度的一些小技巧:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 3DS Max 7.0 PF Source粒子全攻略(14)
  • The Problem with Programming(翻译)
  • 改进的IP计数器
  • Redhat9.0安装fcitx(小企鹅)输入法
  • 设置flashget下载任务完成后自动调用avast!扫描文件
  • MIDlet 部署
  • 无法对Dao/jet初始化的最终解决方案
  • nmap 使用手册
  • The World's Smallest P2P Application
  • JXL 简单例子
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.