前几天中了个病毒..杀毒软件自动杀了.我也忘记了什么病毒了
不过今天才发现病毒没清理干净.每个文件夹下还留下一个文件名为"_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