import java.awt.Container;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class KillGui extends JFrame {
 Container cont;
 JCheckBox jcb1;
 JCheckBox jcb2;
 JCheckBox jcb3;
 JCheckBox jcb4;
 JButton jb1;
 JTextArea jta;
 JScrollPane jsp;
 public KillGui(){
 this.setSize(500,400);
 this.setTitle("世界上最垃圾的杀毒软件");
 this.setResizable(false);
 this.setLocationRelativeTo(null);
 cont = this.getContentPane();
 cont.setLayout(null);
 }
 public void setGui(){
 JLabel jl1 = new JLabel("请选择需要扫描的盘符!");
 jl1.setBounds(50,10,200,25);
 jl1.setForeground(Color.BLUE);
 cont.add(jl1);
 JLabel jl2 = new JLabel("----------------------------------");
 jl2.setBounds(120,330,300,30);
 jl2.setForeground(Color.BLUE);
 cont.add(jl2);
 
 jcb1 = new JCheckBox("C盘");
 jcb1.setBounds(50,30,50,25);
 jcb1.addActionListener(new KillRun(this));
 cont.add(jcb1);
 jcb2 = new JCheckBox("D盘");
 jcb2.setBounds(100,30,50,25);
 jcb2.addActionListener(new KillRun(this));
 cont.add(jcb2);
 jcb3 = new JCheckBox("E盘");
 jcb3.setBounds(150,30,50,25);
 jcb3.addActionListener(new KillRun(this));
 cont.add(jcb3);
 jcb4 = new JCheckBox("F盘");
 jcb4.setBounds(200,30,50,25);
 jcb4.addActionListener(new KillRun(this));
 cont.add(jcb4);
 jb1 = new JButton("开始扫描");
 jb1.setBounds(350,30,100,25);
 jb1.addActionListener(new KillRun(this));
 cont.add(jb1);
 
 
 jta = new JTextArea();
 jsp = new JScrollPane(jta);
 jsp.setBounds(50,80,400,230);
 cont.add(jsp);
 
 }
     public static void main(String[] args) {
      KillGui kg = new KillGui();
      kg.setGui();
      kg.setVisible(true);
}
}import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;public class KillRun implements ActionListener{
KillGui Gui;
public KillRun(KillGui Gui){
this.Gui=Gui;
}
public void add(File file){
Gui.jta.append(file+"\r\n");
}
public void disp(File file){
File []fileList = file.listFiles();
for(int i=0;i<fileList.length;i++){
if(fileList[i].isFile()){
this.add(fileList[i]);
}
else{
this.disp(fileList[i]);
}
}
}
public void actionPerformed(ActionEvent e){
      if(Gui.jcb1.isSelected()==true&&e.getSource()==Gui.jb1){
      File file1 = new File("C:\\");
          this.disp(file1);
      }
      if(Gui.jcb2.isSelected()==true&&e.getSource()==Gui.jb1){
 File file2 = new File("D:\\");
      this.disp(file2);
    }
      if(Gui.jcb3.isSelected()==true&&e.getSource()==Gui.jb1){
 File file3 = new File("E:\\");
      this.disp(file3);
     }
      if(Gui.jcb4.isSelected()==true&&e.getSource()==Gui.jb1){
 File file4 = new File("F:\\");
      this.disp(file4);
     }
   }
}
上面的二个代码是写的一个扫描文件的..代码有二个问题,个位大哥帮忙解决下!
第一个问题就是.如果选择C D E F四个盘符进行扫描的话,扫完C盘就会抛出异常,中断程序!用异常处理也不行.
如果选择 d e f 三个盘符就正常..错误原因好像是C盘是系统文件有不能读,写的或是隐蔽的原因吧.
第二个问题就是.扫描文件的信息,是全部扫完才到JTextArea里显示..我要求是扫描一个文件就显示一个,达到
实时刷新的目的..希望有高手可以帮忙解答

解决方案 »

  1.   

    你做的这个东西我也些过类似的程序。只需要在你的disp(File file){}方法中使用文件过滤的方法。
    public void disp(File file){ 
      File []fileList = file.listFiles(); 
      for(int i=0;i <fileList.length;i++){ 
          if(fileList[i].isFile()){ 
             //这个if是检测文件是否可读,不可读进行下一个文件的检测。
             if(!fileList[i].canRead())
                 continue;
             //这个if是检测文件是否可写的
              if(!fileList[i].canWrite())
                 continue;
             //这个if是检测文件是否隐藏的
              if(fileList[i].isHidden())
                 //隐藏文件的处理方法
             this.add(fileList[i]); 
          } 
          else{ 
              this.disp(fileList[i]); 
          } 
      }