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