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