我们今天做一个查杀病毒的测试版,首先我们来分析一下所需要做的工作。
    查杀病毒的核心内容其实就是扫描硬盘内的文件,也就是一个不断遍历文件的过程,然后每一个文件通过和病毒库里的病毒的匹配,才能确定该文件是否为病毒。
    那么我们首先做准备工作。
    第一,我们需要封装一个病毒类,这个病毒类有他的名字和大小;其次,我们要建一个病毒类库的服务器,里面装有所有的病毒种类;最后,我们要做个查杀病毒的客户端类,在这个类里面有核心工作,就是遍历硬盘上的文件,并匹配病毒库里的病毒种类。
    首先看看我们的病毒类:(附代码)
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的运行结果: