现在的位置: 首页 > 综合 > 正文

一个简单的文件删除器(源码)

2013年12月12日 ⁄ 综合 ⁄ 共 5377字 ⁄ 字号 评论关闭

import java.io.File;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *一个简单的文件删除器
 *作用:将指定目录的指定文件进行删除(含子目录下的同名文件)
 *作者:牟勇
 *时间:2006年9月3日0:58:54
 *版本号:0.0.1
 *版本号:0.0.2
 *修改:增加了线程统计,使得程序可以判断删除工作是否进行完毕
 *修改:在程序进行删除时禁用删除按钮
 *修改:增加了一些提示信息,更加人性化
 *修改时间 :2006年9月23日22:04:37
 *版本号:0.0.3
 *修改:重新恢复线程,解决当程序执行时界面不会刷新的问题
 *修改:将原来匿名类里的内部类移到了FileDelete类中,并对方法进行了一些修改
 *修改:基本实现基本功能,尚需要大量的测试
 *修改时间:2006年12月13日21:20:39
 */
class FileDelete extends JFrame{
 JPanel p1;
 JTextField txtContent;
 JButton btnOK;
 JButton btnBrowse;
 JFileChooser fc;
 JLabel lblInformation;
 int deletefilecount=0;//被删文件计数器
 int threadCount=0;//线程开启统计
 DeleteThread t;//删除指定文件的线程
 public FileDelete(){
  p1=new JPanel();
  p1.setBackground(Color.ORANGE);
  txtContent=new JTextField("请输入路径或单击浏览按钮选择路径...",30);
  btnOK=new JButton("删除");
  btnOK.setEnabled(false);//为避免出错,默认删除按钮不可用
  btnBrowse=new JButton("浏览...");
  lblInformation=new JLabel("说明:本软件仅完成删除从指定路径开始的指定文件(包含其子路径中的指定文件)");
  lblInformation.setForeground(Color.blue);
  lblInformation.setAutoscrolls(true);
  
  p1.add(txtContent);
  p1.add(btnBrowse);
  p1.add(btnOK);
  p1.add(lblInformation);
  //对文本框的鼠标监听  
  txtContent.addMouseListener(new MouseListener(){
   public void mouseReleased(MouseEvent e){}
   public void mousePressed(MouseEvent e){}
   
   //当鼠标移出时,如果文本框为空,则让删除按钮不可用
   public void mouseExited(MouseEvent e){
    if(txtContent.getText().equals("")){
     btnOK.setEnabled(false);
    }else if(lblInformation.getText().endsWith("....")){
     btnOK.setEnabled(true);
    }
   }
   public void mouseEntered(MouseEvent e){}
   //单击鼠标的时候,如果文本框里为提示的文字,则清空文本框
   public void mouseClicked(MouseEvent e){
    if(txtContent.getText().equals("请输入路径或单击浏览按钮选择路径...")){
     txtContent.setText("");
    }
   }
  });
  
  //对文本框的按键监听
  txtContent.addKeyListener(new KeyListener(){
    public void keyTyped(KeyEvent e){
    }
    
    public void keyReleased(KeyEvent e){
    }
    
    public void keyPressed(KeyEvent e){
     if(txtContent.getText().trim().equals("")){
      btnOK.setEnabled(false);
     }else{
      btnOK.setEnabled(true);
     }
    }
   }
  );
  
  //对浏览按钮的监听
  btnBrowse.addActionListener(new ActionListener(){
   
   public void actionPerformed(ActionEvent e){
    String filename="";
    fc=new JFileChooser();
    int iva=fc.showOpenDialog(FileDelete.this);
    //如果用户选择了一个文件,则将文件的绝对路径取出,并将删除按钮设为可用
    if(iva==JFileChooser.APPROVE_OPTION){
     filename=fc.getSelectedFile().getAbsolutePath();
     btnOK.setEnabled(true);
    }
    
    txtContent.setText(filename);
   }
  });
  
  //对删除按钮的监听
  btnOK.addActionListener(new ActionListener(){
   
   
   public void actionPerformed(ActionEvent e){
     deleteStart();
   }
   
  });
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.getContentPane().add(p1);
  this.setTitle("删除指定文件");
  this.setResizable(false);
  this.setSize(500,100);
  
  this.setLocation(300,200);
  this.setVisible(true);
 }
 
 private void deleteStart(){
  
  //构造File类,以获得相关的路径层次
  File file=new File(txtContent.getText());
  //System.out.println(file.getParent());
  File[] files=(new File(file.getParent())).listFiles();
  
  String filename=file.getName();
  
  deletefilecount=0;//初始化被删文件计数器
  
  lblInformation.setText("删除开始,搜索中...");
  
  t=new DeleteThread(files,filename);
  t.start();
  
  //让界面上的控件均不可用
  btnOK.setEnabled(false);
  this.txtContent.setEnabled(false);
  this.btnBrowse.setEnabled(false);
 }
 class DeleteThread extends Thread{
    
   File files[];
   String filename;
   public DeleteThread(File files[],String filename){
    this.files=files;
    this.filename=filename;
   }
   
   public void run(){
    fileDelete(files,filename);
   }
   
   private void fileDelete(File files[],String filename){
    try{
     //每开一个线程,将threadCount加一,进行线程数统计
     threadCount++;
     //循环检测目录及子目录下有没有同名的文件
     for(int i=0;i<files.length;i++){
      //this.sleep(100);
      lblInformation.setText(files[i].getAbsolutePath()+"搜索中....");
      System.out.println(files[i].getAbsolutePath());
      //如果符合文件的要求,则进行删除
      if((files[i].isFile() || files[i].isHidden()) && files[i].getName().equals(filename)){
       
       deletefilecount++;
       lblInformation.setText("共检测到"+deletefilecount+"个....");
       if(files[i].delete()){
        lblInformation.setText(lblInformation.getText()+"  删除成功....");
       }else{
        lblInformation.setText(lblInformation.getText()+"  删除失败....");
       }
      }else if(files[i].isDirectory()){//如果是目录则递归
       //files=files[i].listFiles();
       //filename=filename;
       this.fileDelete(files[i].listFiles(),filename);
      }
     }
    }catch(Exception e){
    }
    //run运行到此,说明线程已经完成,所以threadCount减一
    threadCount--;
    FileDelete.this.setTitle(""+threadCount);//在标题栏显示线程打开数
    //如果所有线程都已关闭,则做相应提示
    if(threadCount==0){
     lblInformation.setText("删除已全部完成,共删除"+deletefilecount+"个文件");
     //恢复界面上的控件可用
     btnOK.setEnabled(true);
     txtContent.setEnabled(true);
     btnBrowse.setEnabled(true);
    }
   }
  }
 
 public static void main(String[] args){
  new FileDelete();
 }
}

您好:
    当您在阅读和使用我所提供的各种内容的时候,我非常感谢,您的阅读已是对我最大的支持。
    我更希望您能给予我更多的支持。
    1.希望您帮助我宣传我的博客,让更多的人知道它,从中获益。
    2.希望您能多提出宝贵意见,包括我所提供的内容中的错误,建设性的意见,更希望获得哪些方面的帮助,您的经验之谈等等。
    3.更希望能得到您经济上的支持。
   
    我博客上面的内容均属于个人的经验,所有的内容均为开源内容,允许您用于任何用途,并不以付费为前提,如果您觉得在阅读和使用我所提供的各种内容的过程中,您得到了帮助,并能在经济上给予我支持,我将感激不尽。
   
    您可以通过银行转帐付款给我:
    招商银行一卡通:
    卡号:6225888712586894
    姓名:牟勇
   
    建行龙卡:
    卡号:4367423860500165563
    姓名:牟勇
   
    您也可以通过汇款的方式:
    通讯地址:云南省昆明市女子(28)中学人民中路如意巷1号
    收信人:陈谦转牟勇收
    邮编:650021
   
    无论您给予我怎么样的支持,我都衷心的再次感谢。
    欢迎光临我的博客:
    http://blog.csdn.net/mouyong
    http://blog.sina.com.cn/u/1259714872

抱歉!评论已关闭.