经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
来源:cnblogs  作者:51人去楼空  时间:2018/11/6 10:22:16  对本文有异议

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

 


 

选择


 删除


1.FileUtils.java类

  1. 1 import java.io.File;//导入包
  2. 2 import java.util.List;//导入包
  3. 3
  4. 4 public class FileUtils {
  5. 5 // 删除文件夹下所有文件
  6. 6 public static void deleteFiles(File rootFile) { //参数是根文件夹
  7. 7 if (rootFile.listFiles().length == 0) {// 如果用户给定的是空文件夹就退出方法
  8. 8 return;//退出
  9. 9 } else {
  10. 10 File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
  11. 11 for (File file : files) {//使用foreach语句遍历文件数组
  12. 12 if (file.isFile()) {//判断是否为文件
  13. 13 file.delete();// 删除指定文件夹下的所有文件
  14. 14 } else {
  15. 15 if (file.listFiles().length == 0) {//file类型是文件夹且文件夹为空
  16. 16 file.delete();// 删除指定文件夹下的所有空文件夹
  17. 17 } else {
  18. 18 deleteDirectories(file);// 删除指定文件夹下的所有非空文件夹(包括file)
  19. 19 }
  20. 20 }
  21. 21 }
  22. 22 }
  23. 23 }
  24. 24
  25. 25 // 删除文件夹及文件夹下所有文件
  26. 26 public static void deleteDirectories(File rootFile) {
  27. 27 if (rootFile.isFile()) {//第一次肯定不是文件类型,因为deleteFiles方法中已经判断过了
  28. 28 rootFile.delete();// 如果给定的File对象是文件就直接删除
  29. 29 } else {// 如果是一个文件夹就将其转换成File数组
  30. 30 File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
  31. 31 for (File file : files) {//使用foreach语句遍历文件数组
  32. 32 deleteDirectories(file);// 如果不是空文件夹则就迭代deleteDictionary()方法
  33. 33 }
  34. 34 rootFile.delete();// 如果是空文件夹就直接删除
  35. 35 }
  36. 36 }
  37. 37
  38. 38 // 获得指定目录下的所有文件的路径
  39. 39 public static List<String> getFilePath(List<String> list, File rootFile) {//返回值的就是传入的List<String> list类型,用于输出被删除的文件
  40. 40 File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
  41. 41 for (File file : files) {//使用foreach语句遍历文件数组
  42. 42 if (file.isDirectory()) {//判断是否为文件夹
  43. 43 getFilePath(list, file);//如果是文件夹则就迭代getFilePath()方法
  44. 44 } else {
  45. 45 //添加file的绝对路径添加到list中,在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\'
  46. 46 list.add(file.getAbsolutePath().replace("\\", File.separator));
  47. 47 }
  48. 48 }
  49. 49 //返回所有文件路径,我利用自动生成的文件夹程序,然后再删除发现文本域没输出,原来获得的只是文件路径,我花了半小时找题,被自己蠢哭
  50. 50 return list;//文件的路径是文件!文件!文件!
  51. 51 }
  52. 52 }

2.FileDeleteFrame.java类

  1. 1 import java.awt.BorderLayout;
  2. 2 import java.awt.event.ActionEvent;
  3. 3 import java.awt.event.ActionListener;
  4. 4 import java.io.File;
  5. 5 import java.util.ArrayList;
  6. 6 import java.util.Iterator;
  7. 7 import java.util.List;
  8. 8
  9. 9 import javax.swing.JButton;
  10. 10 import javax.swing.JFileChooser;
  11. 11 import javax.swing.JFrame;
  12. 12 import javax.swing.JPanel;
  13. 13 import javax.swing.JScrollPane;
  14. 14 import javax.swing.JTextArea;
  15. 15 import javax.swing.JTextField;
  16. 16 import javax.swing.border.EmptyBorder;
  17. 17 import java.awt.Font;
  18. 18 import javax.swing.UIManager;
  19. 19
  20. 20 //@SuppressWarnings J2SE 提供的一个批注或者注解。
  21. 21 //该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默,
  22. 22 //即忽略这些警告信息。当在可序列化的类上缺少 serialVersionUID 定义时的警告
  23. 23 @SuppressWarnings("serial")
  24. 24 public class FileDeleteFrame extends JFrame {//窗口
  25. 25
  26. 26 private JPanel contentPane;//面板
  27. 27 private JTextField chooseTextField;//选择后显示路径的文本域
  28. 28 private File fileName;//文件类型
  29. 29 private JTextArea resultTextArea;//显示被删除的文件路径的文本域
  30. 30
  31. 31 public static void main(String[] args) {
  32. 32 try {
  33. 33 //Java Swing 非常漂亮的外观Nimbus使用方法
  34. 34 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
  35. 35 } catch (Throwable e) {
  36. 36 e.printStackTrace();
  37. 37 }
  38. 38 FileDeleteFrame frame = new FileDeleteFrame();//实例化FileDeleteFrame
  39. 39 frame.setVisible(true);//可显示窗体
  40. 40 }
  41. 41
  42. 42 public FileDeleteFrame() {//无参构造函数
  43. 43 setTitle("\u5220\u9664\u6587\u4EF6\u5939\u4E2D\u6240\u6709\u6587\u4EF6");//Unicode字符集编码
  44. 44 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体方式
  45. 45 setBounds(100, 100, 450, 300);//设置窗体左上角初始位置和宽高
  46. 46 contentPane = new JPanel();//面板
  47. 47 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));//外边距
  48. 48 setContentPane(contentPane);//为窗体设置面板
  49. 49 contentPane.setLayout(new BorderLayout(0, 0));//设置布局方式为边界布局方式
  50. 50
  51. 51 JPanel choosePanel = new JPanel();//选择面板
  52. 52 contentPane.add(choosePanel, BorderLayout.NORTH);//加入到contentPane中,且在北方位置
  53. 53
  54. 54 chooseTextField = new JTextField();//实例化,选择后显示路径的文本域
  55. 55 chooseTextField.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
  56. 56 choosePanel.add(chooseTextField);//添加到选择面板
  57. 57 chooseTextField.setColumns(18);//设置最大显示列数
  58. 58
  59. 59 JButton chooseButton = new JButton("\u9009\u62E9\u6587\u4EF6\u5939");//Unicode字符集编码
  60. 60 chooseButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
  61. 61 chooseButton.addActionListener(new ActionListener() {//设置按钮监听事件
  62. 62 public void actionPerformed(ActionEvent arg0) {//重写actionPerformed方法
  63. 63 do_chooseButton_actionPerformed(arg0);//调用自定义处理方法,在下方
  64. 64 }
  65. 65 });
  66. 66 choosePanel.add(chooseButton);//添加到选择面板
  67. 67
  68. 68 JPanel buttonPanel = new JPanel();//删除面板
  69. 69 contentPane.add(buttonPanel, BorderLayout.SOUTH);//加入到contentPane中,且在南方位置
  70. 70
  71. 71 JButton deleteButton = new JButton("\u5F00\u59CB\u5220\u9664");//删除按钮
  72. 72 deleteButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
  73. 73 deleteButton.addActionListener(new ActionListener() {//设置按钮监听事件
  74. 74 public void actionPerformed(ActionEvent arg0) {//重写actionPerformed方法
  75. 75 do_deleteButton_actionPerformed(arg0);//调用自定义处理方法,在下方
  76. 76 }
  77. 77 });
  78. 78 buttonPanel.add(deleteButton);//添加到删除面板
  79. 79
  80. 80 JScrollPane scrollPane = new JScrollPane();//显示被删除的文件路径的滚动面板
  81. 81 contentPane.add(scrollPane, BorderLayout.CENTER);//加入到contentPane中,且在中间位置
  82. 82
  83. 83 resultTextArea = new JTextArea();//显示被删除的文件路径的文本域
  84. 84 resultTextArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
  85. 85 resultTextArea.setText("\u5220\u9664\u4E86\u4EE5\u4E0B\u6587\u4EF6\uFF1A");//使用Unicode字符集编码,设置标题
  86. 86 scrollPane.setViewportView(resultTextArea);//让文本域显示在滚动面板中
  87. 87 }
  88. 88
  89. 89 protected void do_chooseButton_actionPerformed(ActionEvent arg0) {//自定义选择按钮事件方法
  90. 90 JFileChooser chooser = new JFileChooser();//文件选择器
  91. 91 chooser.setMultiSelectionEnabled(false);//设置为单选
  92. 92 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//设置为仅文件夹可选
  93. 93
  94. 94 //如果选择打开按钮,这返回JFileChooser.APPROVE_OPTION常量,
  95. 95 //参数是文件选择器的位置窗口的中心位置,如果为null则以屏幕中心位置,如果是组件则以组件所在窗体位置
  96. 96 int result = chooser.showOpenDialog(this.getContentPane());
  97. 97 if (result == JFileChooser.APPROVE_OPTION) {//判断是否为打开
  98. 98 fileName = chooser.getSelectedFile();//获取选择到的文件夹
  99. 99 chooseTextField.setText(fileName.getAbsolutePath());//设置选择文本域信息为文件夹的路径
  100. 100 }
  101. 101 }
  102. 102
  103. 103 protected void do_deleteButton_actionPerformed(ActionEvent arg0) {//自定义删除按钮事件方法
  104. 104 try {
  105. 105 List<String> list = new ArrayList<String>();//用于存储被删除的文件路径
  106. 106 FileUtils.getFilePath(list, fileName);//调用删除文件的方法
  107. 107 Iterator<String> iterator = list.iterator();//为list设置迭代器,用于遍历
  108. 108 StringBuilder sb = new StringBuilder();//创建字符串,可实现添加功能
  109. 109 sb.append(resultTextArea.getText() + "\n");//先获取当前删除文本域的信息
  110. 110 while (iterator.hasNext()) {//判断是否有下一个
  111. 111 sb.append(iterator.next());//添加被删除文件的路径
  112. 112 sb.append("\n");//换行
  113. 113 }
  114. 114 resultTextArea.setText(sb.toString());//一口气输出到删除信息文本域
  115. 115 FileUtils.deleteFiles(fileName);//最后调用删除方法,将文件夹下的所有文件夹和所有文件统统删除
  116. 116 } catch(NullPointerException e) {//如果不设置文件夹会捕捉空指针异常
  117. 117 System.out.println("不能为空");//控制台输出提示信息
  118. 118 }
  119. 119 }
  120. 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、Ευχαριστ

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号