一.效果演示
二.源代码
1.DeleteAllTempFile.java
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
public class DeleteAllTempFile extends JFrame {
private JPanel contentPane;
private JTable table;
private JList driverList;
private SearchThread searchThread;
private JProgressBar progressBar;
JTextField textField;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DeleteAllTempFile frame = new DeleteAllTempFile();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public DeleteAllTempFile() {
setTitle("文件删除器");
addWindowListener(new WindowAdapter() {
@Override
public void windowActivated(WindowEvent e) {
do_this_windowActivated(e);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(300, 300, 800, 500);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
driverList = new JList();
driverList.setPreferredSize(new Dimension(130, 0));
driverList.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null,
null, null));
contentPane.add(driverList, BorderLayout.WEST);
JScrollPane scrollPane = new JScrollPane();
scrollPane.setBorder(new BevelBorder(BevelBorder.LOWERED, null, null,
null, null));
contentPane.add(scrollPane, BorderLayout.CENTER);
table = new JTable();
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
table.setModel(new DefaultTableModel(new Object[][] {}, new String[] {
"文件名称", "文件路径",
"文件大小", "处理结果" }) {
boolean[] columnEditables = new boolean[] { false, false, true,
true };
public boolean isCellEditable(int row, int column) {
return columnEditables[column];
}
});
table.getTableHeader().setReorderingAllowed(false);
table.getColumnModel().getColumn(0).setPreferredWidth(100);
table.getColumnModel().getColumn(1).setPreferredWidth(350);
table.getColumnModel().getColumn(2).setPreferredWidth(80);
table.getColumnModel().getColumn(3).setPreferredWidth(111);
scrollPane.setViewportView(table);
JPanel panel = new JPanel();
FlowLayout flowLayout = (FlowLayout) panel.getLayout();
flowLayout.setAlignment(FlowLayout.LEFT);
flowLayout.setHgap(20);
contentPane.add(panel, BorderLayout.SOUTH);
JLabel jLabel=new JLabel("请输入需要删除的文件后缀");
textField=new JTextField(4);
JButton searchButton = new JButton("搜索");
searchButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_searchButton_actionPerformed(e);
}
});
JPanel panel_1 = new JPanel();
panel_1.setPreferredSize(new Dimension(270, 22));
panel.add(panel_1);
panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS));
progressBar = new JProgressBar();
progressBar.setStringPainted(true);
panel_1.add(progressBar);
panel.add(jLabel);
panel.add(textField);
panel.add(searchButton);
JButton clearButton = new JButton("清理");
clearButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
do_clearButton_actionPerformed(e);
}
});
panel.add(clearButton);
}
protected void do_this_windowActivated(WindowEvent e) {
DefaultListModel model = new DefaultListModel();
File[] roots = File.listRoots();
for (File file : roots) {
model.addElement(file);
}
driverList.setModel(model);
}
protected void do_searchButton_actionPerformed(ActionEvent e) {
final File driver = (File) driverList.getSelectedValue();
if (searchThread != null) {
searchThread.setSearching(false);
}
DefaultTableModel model = (DefaultTableModel) table.getModel();
searchThread = new SearchThread(driver, model, progressBar,textField.getText());
searchThread.start();
}
protected void do_clearButton_actionPerformed(ActionEvent e) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
int rowCount = model.getRowCount();
for (int i = 0; i < rowCount; i++) {
File file = (File) model.getValueAt(i, 1);
if (file.exists())
file.delete();
model.setValueAt("处理完成", i, 3);
}
}
}
2.SearchThread.java
import java.io.File;
import java.io.FileFilter;
import javax.swing.JProgressBar;
import javax.swing.table.DefaultTableModel;
public class SearchThread extends Thread {
class TempFileFilter implements FileFilter {
@Override
public boolean accept(File pathname) {
if (pathname.getName().endsWith(str) || pathname.isDirectory())
return true;
return false;
}
}
private File driver;
private DefaultTableModel tableModel;
private boolean searching = true;
private String str;
public boolean isSearching() {
return searching;
}
public void setSearching(boolean searching) {
this.searching = searching;
}
private TempFileFilter tempFileFilter = new TempFileFilter();
private JProgressBar progressBar;
public SearchThread(File driver, DefaultTableModel tableModel,
JProgressBar progressBar,String str) {
this.driver = driver;
this.tableModel = tableModel;
progressBar.setStringPainted(true);
this.progressBar = progressBar;
this.str=str;
}
public void run() {
if (driver != null)
listTempFiles(driver);
}
private void listTempFiles(File driver) {
File[] files = driver.listFiles(tempFileFilter);
if (files == null)
return;
progressBar.setIndeterminate(true);
for (File file : files) {
progressBar.setString(file.toString());
if (file.isFile() && searching) {
tableModel.addRow(new Object[] { file.getName(), file,
file.length(), "未处理" });
} else if (file.isDirectory() && searching) {
listTempFiles(file);
}
}
progressBar.setIndeterminate(false);
progressBar.setString("搜索完成");
}
}