FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有...

2018-11-05  19:42:08开始写

 


 

选择


 删除


1.FileUtils.java类

 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 }

2.FileDeleteFrame.java类

  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、Ευχαριστ

 

转载于:https://www.cnblogs.com/YUJIE666/p/9911491.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值