FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
2018-11-05 19:42:08开始写
选择
删除
1.FileUtils.java类
import java.io.File;//导入包
import java.util.List;//导入包 public class FileUtils {
// 删除文件夹下所有文件
public static void deleteFiles(File rootFile) { //参数是根文件夹
if (rootFile.listFiles().length == 0) {// 如果用户给定的是空文件夹就退出方法
return;//退出
} else {
File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
for (File file : files) {//使用foreach语句遍历文件数组
if (file.isFile()) {//判断是否为文件
file.delete();// 删除指定文件夹下的所有文件
} else {
if (file.listFiles().length == 0) {//file类型是文件夹且文件夹为空
file.delete();// 删除指定文件夹下的所有空文件夹
} else {
deleteDirectories(file);// 删除指定文件夹下的所有非空文件夹(包括file)
}
}
}
}
} // 删除文件夹及文件夹下所有文件
public static void deleteDirectories(File rootFile) {
if (rootFile.isFile()) {//第一次肯定不是文件类型,因为deleteFiles方法中已经判断过了
rootFile.delete();// 如果给定的File对象是文件就直接删除
} else {// 如果是一个文件夹就将其转换成File数组
File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
for (File file : files) {//使用foreach语句遍历文件数组
deleteDirectories(file);// 如果不是空文件夹则就迭代deleteDictionary()方法
}
rootFile.delete();// 如果是空文件夹就直接删除
}
} // 获得指定目录下的所有文件的路径
public static List<String> getFilePath(List<String> list, File rootFile) {//返回值的就是传入的List<String> list类型,用于输出被删除的文件
File[] files = rootFile.listFiles();// 将非空文件夹转换成File数组
for (File file : files) {//使用foreach语句遍历文件数组
if (file.isDirectory()) {//判断是否为文件夹
getFilePath(list, file);//如果是文件夹则就迭代getFilePath()方法
} else {
//添加file的绝对路径添加到list中,在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\'
list.add(file.getAbsolutePath().replace("\\", File.separator));
}
}
//返回所有文件路径,我利用自动生成的文件夹程序,然后再删除发现文本域没输出,原来获得的只是文件路径,我花了半小时找题,被自己蠢哭
return list;//文件的路径是文件!文件!文件!
}
}
2.FileDeleteFrame.java类
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;
import java.awt.Font;
import javax.swing.UIManager; //@SuppressWarnings J2SE 提供的一个批注或者注解。
//该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默,
//即忽略这些警告信息。当在可序列化的类上缺少 serialVersionUID 定义时的警告
@SuppressWarnings("serial")
public class FileDeleteFrame extends JFrame {//窗口 private JPanel contentPane;//面板
private JTextField chooseTextField;//选择后显示路径的文本域
private File fileName;//文件类型
private JTextArea resultTextArea;//显示被删除的文件路径的文本域 public static void main(String[] args) {
try {
//Java Swing 非常漂亮的外观Nimbus使用方法
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
} catch (Throwable e) {
e.printStackTrace();
}
FileDeleteFrame frame = new FileDeleteFrame();//实例化FileDeleteFrame
frame.setVisible(true);//可显示窗体
} public FileDeleteFrame() {//无参构造函数
setTitle("\u5220\u9664\u6587\u4EF6\u5939\u4E2D\u6240\u6709\u6587\u4EF6");//Unicode字符集编码
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体方式
setBounds(100, 100, 450, 300);//设置窗体左上角初始位置和宽高
contentPane = new JPanel();//面板
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));//外边距
setContentPane(contentPane);//为窗体设置面板
contentPane.setLayout(new BorderLayout(0, 0));//设置布局方式为边界布局方式 JPanel choosePanel = new JPanel();//选择面板
contentPane.add(choosePanel, BorderLayout.NORTH);//加入到contentPane中,且在北方位置 chooseTextField = new JTextField();//实例化,选择后显示路径的文本域
chooseTextField.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
choosePanel.add(chooseTextField);//添加到选择面板
chooseTextField.setColumns(18);//设置最大显示列数 JButton chooseButton = new JButton("\u9009\u62E9\u6587\u4EF6\u5939");//Unicode字符集编码
chooseButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
chooseButton.addActionListener(new ActionListener() {//设置按钮监听事件
public void actionPerformed(ActionEvent arg0) {//重写actionPerformed方法
do_chooseButton_actionPerformed(arg0);//调用自定义处理方法,在下方
}
});
choosePanel.add(chooseButton);//添加到选择面板 JPanel buttonPanel = new JPanel();//删除面板
contentPane.add(buttonPanel, BorderLayout.SOUTH);//加入到contentPane中,且在南方位置 JButton deleteButton = new JButton("\u5F00\u59CB\u5220\u9664");//删除按钮
deleteButton.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
deleteButton.addActionListener(new ActionListener() {//设置按钮监听事件
public void actionPerformed(ActionEvent arg0) {//重写actionPerformed方法
do_deleteButton_actionPerformed(arg0);//调用自定义处理方法,在下方
}
});
buttonPanel.add(deleteButton);//添加到删除面板 JScrollPane scrollPane = new JScrollPane();//显示被删除的文件路径的滚动面板
contentPane.add(scrollPane, BorderLayout.CENTER);//加入到contentPane中,且在中间位置 resultTextArea = new JTextArea();//显示被删除的文件路径的文本域
resultTextArea.setFont(new Font("微软雅黑", Font.PLAIN, 16));//设置字体,类型,大小
resultTextArea.setText("\u5220\u9664\u4E86\u4EE5\u4E0B\u6587\u4EF6\uFF1A");//使用Unicode字符集编码,设置标题
scrollPane.setViewportView(resultTextArea);//让文本域显示在滚动面板中
} protected void do_chooseButton_actionPerformed(ActionEvent arg0) {//自定义选择按钮事件方法
JFileChooser chooser = new JFileChooser();//文件选择器
chooser.setMultiSelectionEnabled(false);//设置为单选
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);//设置为仅文件夹可选 //如果选择打开按钮,这返回JFileChooser.APPROVE_OPTION常量,
//参数是文件选择器的位置窗口的中心位置,如果为null则以屏幕中心位置,如果是组件则以组件所在窗体位置
int result = chooser.showOpenDialog(this.getContentPane());
if (result == JFileChooser.APPROVE_OPTION) {//判断是否为打开
fileName = chooser.getSelectedFile();//获取选择到的文件夹
chooseTextField.setText(fileName.getAbsolutePath());//设置选择文本域信息为文件夹的路径
}
} protected void do_deleteButton_actionPerformed(ActionEvent arg0) {//自定义删除按钮事件方法
try {
List<String> list = new ArrayList<String>();//用于存储被删除的文件路径
FileUtils.getFilePath(list, fileName);//调用删除文件的方法
Iterator<String> iterator = list.iterator();//为list设置迭代器,用于遍历
StringBuilder sb = new StringBuilder();//创建字符串,可实现添加功能
sb.append(resultTextArea.getText() + "\n");//先获取当前删除文本域的信息
while (iterator.hasNext()) {//判断是否有下一个
sb.append(iterator.next());//添加被删除文件的路径
sb.append("\n");//换行
}
resultTextArea.setText(sb.toString());//一口气输出到删除信息文本域
FileUtils.deleteFiles(fileName);//最后调用删除方法,将文件夹下的所有文件夹和所有文件统统删除
} catch(NullPointerException e) {//如果不设置文件夹会捕捉空指针异常
System.out.println("不能为空");//控制台输出提示信息
}
}
}
谢谢、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、Ευχαριστ
FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有的更多相关文章
- C#获取某一路径下的所有文件名信息(包括子文件夹)
前言:初步梳理记录,以后慢慢总结更多的方法... 方法一:使用微软提供的方法:Dicrectory类中的:public static string[] GetFiles(string path, st ...
- Android程序函数 将assets文件夹下的文件复制到手机的sd卡中(包括子文件夹)
最近在做个功能是将asset文件夹下的所有文件(包括子文件)全部拷贝出来到指定目录下.所用的方法无非是用AssetManager.但是这里 有个问题是也要讲子文件夹和子文件都要拷贝出来.到网上Goog ...
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】
转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html 本文:http://www.cnblogs.com/xudong-bupt/p/350444 ...
- c++ 输出文件夹(不包括子文件夹)中后缀文件
参考:_finddata_t结构体用法 - 麒麒川的博客 - CSDN博客 准备知识部分: MessageBox MessageBox function (winuser.h) | Microsoft ...
- C#获取文件夹内文件包括子文件(递归)实例
这个在我工作上,写了一次工具项目,用上的. static ArrayList FileList = new ArrayList();//这个必须写在方法外, static ArrayList GetA ...
- python 小练习之删除文件夹下的所有文件,包括子文件夹中的文件
先屡一下思路 一步步怎么实现 1 要求是要删除所有文件(只是删除文件 而不是文件夹),所以 我们肯定要遍历这个文件目录 (for in遍历) 2 每遍历一个元素时(文件),我们要判断该元素的属性是 ...
- NSIS如何对一整个目录文件夹(包括子文件夹和其中的文件)压缩
原来不加/r参数,NSIS编译器就会不认识文件夹啊. File /r [dir] Reference: http://stackoverflow.com/questions/7973242/nsis- ...
- Java中递归的优缺点,Java写一个递归遍历目录下面的所有文件包括子文件夹里边的文件。
题目: 遍历出aaa文件夹下的文件 首先分析思路: 1.首先判断这个文件夹是否为文件,通过isFile()函数可以判断是否为文件. 2.然后通过isDirectory判断是否为目录. 3.如果是目录就 ...
随机推荐
- linux 修改密码命令
1.passwd命令 脚本中语法:echo "password" | passwd testuser --stdin > /dev/null 2>&1 或(e ...
- 洛谷P3242 接水果 [HNOI2015] 整体二分
正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这 ...
- oracle中in和exists的区别
IN适合于外表大而内表小的情况:EXISTS适合于外表小而内表大的情况. 性能上的比较 比如Select * from T1 where x in ( select y from T2 ) 执行的过程 ...
- Oracle 11g服务详细介绍及哪些服务是必须开启的
成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service: Oracle卷映射拷贝写入服务,VSS(Volume Sh ...
- Spring JPA实现逻辑源码分析总结
1.SharedEntityManagerCreator: entitymanager的创建入口 该类被EntityManagerBeanDefinitionRegistrarPostProcesso ...
- mysql 初识sql语句
有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写 mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要下载mysql的 ...
- SQL SERVER 2016研究一
一.安装SQL Server 2016 安装检查提示异常: 安装补丁: 根据系统判断补丁安装顺序,按顺序安装 Windows server 2012 R2 安装SQL补丁如下以及JDK: 安装完成 二 ...
- 萌新接触前端的第三课——JavaScript
JavaScript概述 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase ...
- 013-程序性能分析之thread dump和heap dump
一.dump基本概念 主要用于故障定位(尤其是out of memory)和性能分析.主要记录了JVM运行期间的内存占用.线程执行等情况,这就是常说的dump文件.常用的有heap dump和thre ...
- PHP策略模式2
<?php /** PHP 策略模式 * 策略模式是对象的行为模式,用意是对一组算法的封装.动态的选择需要的算法并使用. * 策略模式指的是程序中涉及决策控制的一种模式.策略模式功能非常强大,因 ...