- 1 import java.io.File;//导入包
- 2 import java.util.List;//导入包
- 3
- 4 public class FileUtils {
- 5 // 删除文件夹下所有文件
- 6 public static void deleteFiles(File rootFile) { //参数是根文件夹
- 7 if (rootFile.listFiles().length == 0) {// 如果用户给定的是空文件夹就退出方法
- 8 return;//退出
- 9 } else {
- 10 File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
- 11 for (File file : files) {//使用foreach语句遍历文件数组
- 12 if (file.isFile()) {//判断是否为文件
- 13 file.delete();// 删除指定文件夹下的所有文件
- 14 } else {
- 15 if (file.listFiles().length == 0) {//file类型是文件夹且文件夹为空
- 16 file.delete();// 删除指定文件夹下的所有空文件夹
- 17 } else {
- 18 deleteDirectories(file);// 删除指定文件夹下的所有非空文件夹(包括file)
- 19 }
- 20 }
- 21 }
- 22 }
- 23 }
- 24
- 25 // 删除文件夹及文件夹下所有文件
- 26 public static void deleteDirectories(File rootFile) {
- 27 if (rootFile.isFile()) {//第一次肯定不是文件类型,因为deleteFiles方法中已经判断过了
- 28 rootFile.delete();// 如果给定的File对象是文件就直接删除
- 29 } else {// 如果是一个文件夹就将其转换成File数组
- 30 File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
- 31 for (File file : files) {//使用foreach语句遍历文件数组
- 32 deleteDirectories(file);// 如果不是空文件夹则就迭代deleteDictionary()方法
- 33 }
- 34 rootFile.delete();// 如果是空文件夹就直接删除
- 35 }
- 36 }
- 37
- 38 // 获得指定目录下的所有文件的路径
- 39 public static List<String> getFilePath(List<String> list, File rootFile) {//返回值的就是传入的List<String> list类型,用于输出被删除的文件
- 40 File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
- 41 for (File file : files) {//使用foreach语句遍历文件数组
- 42 if (file.isDirectory()) {//判断是否为文件夹
- 43 getFilePath(list, file);//如果是文件夹则就迭代getFilePath()方法
- 44 } else {
- 45 //添加file的绝对路径添加到list中,在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\'
- 46 list.add(file.getAbsolutePath().replace("\\", File.separator));
- 47 }
- 48 }
- 49 //返回所有文件路径,我利用自动生成的文件夹程序,然后再删除发现文本域没输出,原来获得的只是文件路径,我花了半小时找题,被自己蠢哭
- 50 return list;//文件的路径是文件!文件!文件!
- 51 }
- 52 }
- 1 import java.awt.BorderLayout;
- 2 import java.awt.event.ActionEvent;
- 3 import java.awt.event.ActionListener;
- 4 import java.io.File;
- 5 import java.util.ArrayList;
- 6 import java.util.Iterator;
- 7 import java.util.List;
- 8
- 9 import javax.swing.JButton;
- 10 import javax.swing.JFileChooser;
- 11 import javax.swing.JFrame;
- 12 import javax.swing.JPanel;
- 13 import javax.swing.JScrollPane;
- 14 import javax.swing.JTextArea;
- 15 import javax.swing.JTextField;
- 16 import javax.swing.border.EmptyBorder;
- 17 import java.awt.Font;
- 18 import javax.swing.UIManager;
- 19
- 20 //@SuppressWarnings J2SE 提供的一个批注或者注解。
- 21 //该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默,
- 22 //即忽略这些警告信息。当在可序列化的类上缺少 serialVersionUID 定义时的警告
- 23 @SuppressWarnings("serial")
- 24 public class FileDeleteFrame extends JFrame {//窗口
- 25
- 26 private JPanel contentPane;//面板
- 27 private JTextField chooseTextField;//选择后显示路径的文本域
- 28 private File fileName;//文件类型
- 29 private JTextArea resultTextArea;//显示被删除的文件路径的文本域
- 30
- 31 public static void main(String[] args) {
- 32 try {
- 33 //Java Swing 非常漂亮的外观Nimbus使用方法
- 34 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
- 35 } catch (Throwable e) {
- 36 e.printStackTrace();
- 37 }
- 38 FileDeleteFrame frame = new FileDeleteFrame();//实例化FileDeleteFrame
- 39 frame.setVisible(true);//可显示窗体
- 40 }
- 41
- 42 public FileDeleteFrame() {//无参构造函数
- 43 setTitle("\u5220\u9664\u6587\u4EF6\u5939\u4E2D\u6240\u6709\u6587\u4EF6");//Unicode字符集编码
- 44 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体方式
- 45 setBounds(100, 100, 450, 300);//设置窗体左上角初始位置和宽高
- 46 contentPane = new JPanel();//面板
- 47 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));//外边距
- 48 setContentPane(contentPane);//为窗体设置面板
- 49 contentPane.setLayout(new BorderLayout(0, 0));//设置布局方式为边界布局方式
- 50
- 51 JPanel choosePanel = new JPanel();//选择面板
- 52 contentPane.add(choosePanel, BorderLayout.NORTH);//加入到contentPane中,且在北方位置
- 53
- 54 chooseTextField = new JTextField();//实例化,选择后显示路径的文本域
- 55 chooseTextField.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
- 56 choosePanel.add(chooseTextField);//添加到选择面板
- 57 chooseTextField.setColumns(18);//设置最大显示列数
- 58
- 59 JButton chooseButton = new JButton("\u9009\u62E9\u6587\u4EF6\u5939");//Unicode字符集编码
- 60 chooseButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
- 61 chooseButton.addActionListener(new ActionListener() {//设置按钮监听事件
- 62 public void actionPerformed(ActionEvent arg0) {//重写actionPerformed方法
- 63 do_chooseButton_actionPerformed(arg0);//调用自定义处理方法,在下方
- 64 }
- 65 });
- 66 choosePanel.add(chooseButton);//添加到选择面板
- 67
- 68 JPanel buttonPanel = new JPanel();//删除面板
- 69 contentPane.add(buttonPanel, BorderLayout.SOUTH);//加入到contentPane中,且在南方位置
- 70
- 71 JButton deleteButton = new JButton("\u5F00\u59CB\u5220\u9664");//删除按钮
- 72 deleteButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
- 73 deleteButton.addActionListener(new ActionListener() {//设置按钮监听事件
- 74 public void actionPerformed(ActionEvent arg0) {//重写actionPerformed方法
- 75 do_deleteButton_actionPerformed(arg0);//调用自定义处理方法,在下方
- 76 }
- 77 });
- 78 buttonPanel.add(deleteButton);//添加到删除面板
- 79
- 80 JScrollPane scrollPane = new JScrollPane();//显示被删除的文件路径的滚动面板
- 81 contentPane.add(scrollPane, BorderLayout.CENTER);//加入到contentPane中,且在中间位置
- 82
- 83 resultTextArea = new JTextArea();//显示被删除的文件路径的文本域
- 84 resultTextArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
- 85 resultTextArea.setText("\u5220\u9664\u4E86\u4EE5\u4E0B\u6587\u4EF6\uFF1A");//使用Unicode字符集编码,设置标题
- 86 scrollPane.setViewportView(resultTextArea);//让文本域显示在滚动面板中
- 87 }
- 88
- 89 protected void do_chooseButton_actionPerformed(ActionEvent arg0) {//自定义选择按钮事件方法
- 90 JFileChooser chooser = new JFileChooser();//文件选择器
- 91 chooser.setMultiSelectionEnabled(false);//设置为单选
- 92 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//设置为仅文件夹可选
- 93
- 94 //如果选择打开按钮,这返回JFileChooser.APPROVE_OPTION常量,
- 95 //参数是文件选择器的位置窗口的中心位置,如果为null则以屏幕中心位置,如果是组件则以组件所在窗体位置
- 96 int result = chooser.showOpenDialog(this.getContentPane());
- 97 if (result == JFileChooser.APPROVE_OPTION) {//判断是否为打开
- 98 fileName = chooser.getSelectedFile();//获取选择到的文件夹
- 99 chooseTextField.setText(fileName.getAbsolutePath());//设置选择文本域信息为文件夹的路径
- 100 }
- 101 }
- 102
- 103 protected void do_deleteButton_actionPerformed(ActionEvent arg0) {//自定义删除按钮事件方法
- 104 try {
- 105 List<String> list = new ArrayList<String>();//用于存储被删除的文件路径
- 106 FileUtils.getFilePath(list, fileName);//调用删除文件的方法
- 107 Iterator<String> iterator = list.iterator();//为list设置迭代器,用于遍历
- 108 StringBuilder sb = new StringBuilder();//创建字符串,可实现添加功能
- 109 sb.append(resultTextArea.getText() + "\n");//先获取当前删除文本域的信息
- 110 while (iterator.hasNext()) {//判断是否有下一个
- 111 sb.append(iterator.next());//添加被删除文件的路径
- 112 sb.append("\n");//换行
- 113 }
- 114 resultTextArea.setText(sb.toString());//一口气输出到删除信息文本域
- 115 FileUtils.deleteFiles(fileName);//最后调用删除方法,将文件夹下的所有文件夹和所有文件统统删除
- 116 } catch(NullPointerException e) {//如果不设置文件夹会捕捉空指针异常
- 117 System.out.println("不能为空");//控制台输出提示信息
- 118 }
- 119 }
- 120 }
谢谢、Thank you、Salamat Do(撒拉玛特朵)、あリがCám o*n(嘉蒙)とゥ(阿里嘎都)、????? (勘三哈咪瘩)、terima Kasih(得力马卡系)、kob-khun(寇布库恩)、dhanyavaad(达尼阿瓦德)、toda(透达)、te?ekkür ederim(特谢库尔埃戴里姆)、Dzie,kuje(以库以而)、Spasibo(思巴喜柏)、Danke(但可)、shokran(休克朗)、Obrigada(欧布哩嘎搭)、dank u(当Q)、Merci(梅呵西)、Gracias(格拉喜亚思)、Grazie(格啦姬)、Благодарности、Tak、Kiitos、Díky、Hvala、Mul?umesc、Takk、Ευχαριστ