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.更希望能得到您经济上的支持。