最近心血来潮.想写一个KillAutorun.  程序是写好了.可是文件就是删除不掉.. 网上查了一下,说是Java的BUG .. 郁闷.请各位指教下  应该怎么办..  烦闷无比.
import java.io.*;public class SearchAutorun {
public void search() throws IOException {
String st = new String();
st = "G:\\";
File f = new File(st);
String[] string = f.list(); for (int i = 0; i < string.length; i++) {
if (string[i].equals("autorun.inf")) {
File newf = new File(st + string[i]);
BufferedReader br = new BufferedReader(new FileReader(st
+ string[i])); // 构建缓冲输入流.
while (br.readLine() != null) { // 读取文件内容
String s = br.readLine(); // 读取inf文件的一行
String subs = s.substring(s.indexOf('=') + 1); // 分割字符串将等号后面的字符串划为一个新的字符串.
File nf = new File(st + subs);// 构建病毒文件
//System.gc();
nf.delete(); // 删除病毒文件
}
System.out.println("删除了病毒文件");
//System.gc();
newf.delete(); // 删除autorun.inf文件.
System.out.println("删除了自动运行文本.");
}
}
}
}
下面是程序入口
import java.io.IOException;public class MainFrame {
public static void main(String[] args) throws IOException {
SearchAutorun sa = new SearchAutorun();
sa.search();
}
}Autorun内容
[AutoRun]
open=system.pif
shellexecute=system.pif
shell\Auto\command=system.pif system.pif为空.. 
删死我了都快..  没救了?

解决方案 »

  1.   

    主要是BufferedReader流用完没关闭 还有readLine这里重复读可能会导致NullPointerException
      

  2.   

    String s;
                    while ((s = br.readLine()) != null) { // 读取文件内容
                        String subs = s.substring(s.indexOf('=') + 1); // 分割字符串将等号后面的字符串划为一个新的字符串.
                        File nf = new File(st + subs);// 构建病毒文件
                        //System.gc();
                        nf.delete(); // 删除病毒文件
                    }
                    System.out.println("删除了病毒文件");
                    br.close();
                    //System.gc();
                    newf.delete(); // 删除autorun.inf文件.
                    System.out.println("删除了自动运行文本.");
      

  3.   

    我用2楼的方法 可以删掉Autorun.inf   但是删不掉那个所谓的"病毒文件"..  
    寻求解决办法..
      

  4.   

    可以看到删掉了一次Autorun   但是最后还是生成了一个..没有删除
      

  5.   

    Autorun   在删除之钱,可能病毒文件已经运行,也就说,系统中会有一个线程检测Autorun文件,如果被删会立即生成一份,根本就删不掉.
    除非你能先把病毒程序停止运行,然后在删除该启动文件.以后打开盘附的时候不要双击,通过ie来打开.
      

  6.   

    不是..是我自己测试的. 可以把Autorun删除..但是那个System.pif 文件是  删除后 又出来了一个..  不是病毒..我怀疑还是没删掉. 输入流在作怪吧.. 
    这个东西也只能在安全模式下杀毒. 删除注册表的启动项.. 我想问  启动项怎么删除???怎么访问注册表..这是个问题.
      

  7.   


    能把你的代码贴上来么? 
    你的JDK 版本是多少 ?   我的是1.6的.
      

  8.   

    删除注册表项需要在程序里面生成注册表文件,执行下这个注册表文件,执行后删除文件,windows里面的文件经常被锁住,你的想法是好的但是可行性太低,另外这些操作用批处理写就可以了无需java
      

  9.   

    好好学习学习~~~~~用java写杀毒程序~~~~·
      

  10.   

    我想你肯定是开了一个流,然后没有把它关闭,这样你调用delete就是每次都是返回false,删不掉的,也不会报什么异常的