我們今天做一個查殺病毒的測試版,首先我們來分析一下所需要做的工作。
查殺病毒的核心內容其實就是掃描硬盤內的文件,也就是一個不斷遍歷文件的過程,然后每一個文件通過和病毒庫里的病毒的匹配,才能確定該文件是否為病毒。
那么我們首先做準備工作。
第一,我們需要封裝一個病毒類,這個病毒類有他的名字和大小;其次,我們要建一個病毒類庫的服務器,里面裝有所有的病毒種類;最后,我們要做個查殺病毒的客戶端類,在這個類里面有核心工作,就是遍歷硬盤上的文件,并匹配病毒庫里的病毒種類。
首先看看我們的病毒類:(附代碼)

public class Virus
{

private String name;
private int size;

public String getName()
{
return name;
}

public void setName(String name)
{
this.name = name;
}

public int getSize()
{
return size;
}

public void setSize(int size)
{
this.size = size;
}
}

其次,我們要做個病毒庫服務器,里面有病毒的種類,我們看看代碼:

public class Server
{

private List<Virus> virusList = new ArrayList<Virus>();

public List<Virus> getVirusList()
{
Virus virus = null;
virus = new Virus();
virus.setName("哈哈.exe");
virus.setSize(5);
virusList.add(virus);
virus = new Virus();
virus.setName("吼吼.exe");
virus.setSize(3);
virusList.add(virus);
virus = new Virus();
virus.setName("呵呵.exe");
virus.setSize(4);
virusList.add(virus);
virus = new Virus();
virus.setName("嘿嘿.exe");
virus.setSize(2);
virusList.add(virus);
virus = new Virus();
virus.setName("嘻嘻.exe");
virus.setSize(1);
virusList.add(virus);
return virusList;
}
}

最后,我們要做一個查殺病毒的客戶端,我們必須知道如何遍歷硬盤上的文件,其核心內容是如下代碼:

public class KillVirus
{


public static void main(String[] args)
{
String s = "E:\\圖片\\韓佳人";
File f = new File(s);
search(f);
}

public static void search(File f)
{
Server server = new Server();
List<Virus> virus = server.getVirusList();

if(f.isDirectory())
{
File[] files = f.listFiles();

try
{

for(int i=0;i<files.length;i++)
{
search(files[i]);
}

}catch(Exception e)
{
}
}

else
{
System.out.println(f);

for(Virus v : virus)
{
//引用類型用equals匹配

if(f.getName().equals(v.getName()))
{
System.out.println("病毒名字是:"+v.getName()+"病毒大小:"+v.getSize());
}
}
}
}

}

其核心內容就是遍歷硬盤上的文件,通過判斷是文件還是目錄的方法(如果是目錄繼續調用遍歷該目錄里面的子文件,如果是文件則顯示出該文件的信息),來實現遍歷或者查找硬盤上的文件的過程。
當查找到是文件的時候再去和病毒庫里的每一個文件匹配,若他們的名字相同就默認為這個文件是病毒。
我們看看運行結果:
再做一個查殺病毒UI的類:

public class KillVirusClientUI
{


/** *//**
* @param args
*/

public static void main(String[] args)
{
// TODO Auto-generated method stub
Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setMaximized(true);
shell.setText("360安全衛士");
final Text text = new Text(shell,SWT.MULTI);
text.setBounds(180, 150, 1000, 300);
final ProgressBar progressBar = new ProgressBar(shell, SWT.HORIZONTAL);
GridData data = new GridData();
data.horizontalSpan = 2;
data.grabExcessHorizontalSpace = true;
progressBar.setLayoutData(data);
progressBar.setMaximum(100);// 設置最大值
progressBar.setMinimum(0);// 設置最小值
progressBar.setBounds(10, 80, 1300, 20);
final Button button = new Button(shell,SWT.Activate);
button.setBounds(550, 500, 200, 75);
button.setText("開始查殺");
Server server = new Server();
final List<Virus> virusList = server.getVirusList();

button.addSelectionListener(new SelectionAdapter()
{

public void widgetSelected(SelectionEvent e)
{
String s = "E:\\圖片\\韓佳人";
File f = new File(s);
progressBar.setSelection(0);
search(f);
}

public void search(File f)
{

if(f.isDirectory())
{
File[] files = f.listFiles();

try
{

for(int i=0;i<files.length;i++)
{
search(files[i]);
}
}

catch(Exception e)
{}
}

else
{
text.append(f.getPath()+"\n");
progressBar.setSelection(progressBar.getSelection() + 1);//顯示一條數據,滾動條進度加1

for(Virus v : virusList)
{

try
{
Thread.sleep(10);
}

catch (InterruptedException e1)
{}

if(f.getName().equals(v.getName()))
{
text.setText("病毒名字是:"+f.getName()+"\n病毒大小:"+f.getPath());
}
}
}
}
});
shell.layout();
shell.open();

while(!shell.isDisposed())
{

if(!display.readAndDispatch())
{
display.sleep();
}
}

}

}
我們再來看看病毒UI的運行結果: