File.delete()方法问题.

cydp007 2008-03-15 12:53:22
最近心血来潮.想写一个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为空..


删死我了都快.. 没救了?
...全文
259 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
cydp007 2008-03-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dracularking 的回复:]
先不考虑是真病毒的情况 我测试都是成功的 程序是建一个删一个 不存在会多出来的问题啊
[/Quote]

能把你的代码贴上来么?


你的JDK 版本是多少 ? 我的是1.6的.
wjs2338 2008-03-16
  • 打赏
  • 举报
回复
我想你肯定是开了一个流,然后没有把它关闭,这样你调用delete就是每次都是返回false,删不掉的,也不会报什么异常的
zjhlht 2008-03-16
  • 打赏
  • 举报
回复
好好学习学习~~~~~

用java写杀毒程序~~~~·
sunyujia 2008-03-16
  • 打赏
  • 举报
回复
删除注册表项需要在程序里面生成注册表文件,执行下这个注册表文件,执行后删除文件,windows里面的文件经常被锁住,你的想法是好的但是可行性太低,另外这些操作用批处理写就可以了无需java
dracularking 2008-03-15
  • 打赏
  • 举报
回复
先不考虑是真病毒的情况 我测试都是成功的 程序是建一个删一个 不存在会多出来的问题啊
cydp007 2008-03-15
  • 打赏
  • 举报
回复
不是..是我自己测试的.

可以把Autorun删除..但是那个System.pif 文件是 删除后 又出来了一个..

不是病毒..我怀疑还是没删掉. 输入流在作怪吧..


这个东西也只能在安全模式下杀毒.

删除注册表的启动项.. 我想问 启动项怎么删除???怎么访问注册表..这是个问题.
dracularking 2008-03-15
  • 打赏
  • 举报
回复
...
删掉了又生成了 是真的病毒吗
我昨天晚上测试是成功了的
bt_lose 2008-03-15
  • 打赏
  • 举报
回复
Autorun 在删除之钱,可能病毒文件已经运行,也就说,系统中会有一个线程检测Autorun文件,如果被删会立即生成一份,根本就删不掉.
除非你能先把病毒程序停止运行,然后在删除该启动文件.

以后打开盘附的时候不要双击,通过ie来打开.
cydp007 2008-03-15
  • 打赏
  • 举报
回复
可以看到删掉了一次Autorun 但是最后还是生成了一个..

没有删除
hoszone 2008-03-15
  • 打赏
  • 举报
回复
是不是你删掉又生成了??
dracularking 2008-03-15
  • 打赏
  • 举报
回复
trim或者改善你的Autorun
dracularking 2008-03-15
  • 打赏
  • 举报
回复
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("删除了自动运行文本.");
dracularking 2008-03-15
  • 打赏
  • 举报
回复
你获取的病毒文件名是不是后面有空格啊
dracularking 2008-03-15
  • 打赏
  • 举报
回复
主要是BufferedReader流用完没关闭 还有readLine这里重复读可能会导致NullPointerException
cydp007 2008-03-15
  • 打赏
  • 举报
回复
我用2楼的方法 可以删掉Autorun.inf 但是删不掉那个所谓的"病毒文件"..


寻求解决办法..
千里冰封820 2008-03-15
  • 打赏
  • 举报
回复
一,如果这个文件正在被运行,则不能删除
二,如果这个文件流被你打开了,你没有关闭,也不能被删除

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧