大家好,又见面了,我是你们的朋友全栈君。
在对文件夹进行操作时,如果用file.deleate()方法,有时候恐怕不凑效.用了第三方的FileUtils的forceDeleteFile()还是不凑效,所以,自己就用java写一个基于dos命令的方法来实现强制删除文件夹. 这并没有什么难的,只要知道dos命令,在java文件中调用runtime就好办了. 在这里为写了三个方法:删除某个文件目录;删除某个文件(不是文件夹)和清空某个文件夹下的所有文件及文件夹.自己根据自己的需求用吧.
/**使用dos命令强力删除目录 * 强力删除文件夹,里面就算有子文件夹,隐藏的,只读的,都能够全部删除掉. * directory 需要删除的目录 * return 如果目录不存在,则返回"目录不存在";删除成功,返回ok;删除失败 ,返回失败原因 * */
public static String forceDeleteDirectory(String directory){
File tagFile=new File(directory);
if(tagFile.exists()){
try {
String cmd = "cmd /c rd "+directory+" /s/q";
Runtime rt = Runtime.getRuntime(); // 获取运行时系统
Process proc = rt.exec(cmd); // 执行命令
InputStream stderr = proc.getInputStream(); // 获取输入流
InputStreamReader isr = new InputStreamReader(stderr,"gbk");
BufferedReader br = new BufferedReader(isr);
String line = null;
/*while ((line = br.readLine()) != null) { // 打印出命令执行的结果 System.out.println(line); }*/
} catch (Throwable t) {
t.printStackTrace();
return t.getMessage();
}
return "ok";
}else {
return "目录不存在";
}
}
/**使用dos命令强力删除文件 * 强力删除文件 * file 需要删除的文件 * return 如果目录不存在,则返回"目录不存在"; * 删除成功,返回ok; * 删除失败 ,返回失败原因 * */
public static String forceDeleteFile(String file){
File tagFile=new File(file);
if(tagFile.exists()){
try {
String cmd = "cmd /c del "+file;
Runtime rt = Runtime.getRuntime(); // 获取运行时系统
Process proc = rt.exec(cmd); // 执行命令
InputStream stderr = proc.getInputStream(); // 获取输入流
InputStreamReader isr = new InputStreamReader(stderr,"gbk");
BufferedReader br = new BufferedReader(isr);
String line = null;
/*while ((line = br.readLine()) != null) { // 打印出命令执行的结果 System.out.println(line); }*/
} catch (Throwable t) {
t.printStackTrace();
return t.getMessage();
}
return "ok";
}else {
return "目录不存在";
}
}
/**使用dos命令强力删除指定文件夹下的文件或者文件夹 * * file 需要删除的文件 * return 如果目录不存在,则返回"目录不存在"; * 删除成功,返回ok; * 删除失败 ,返回失败原因 * */
public static String forceCleanFileBelowDirectory(String directory){
File tagFile=new File(directory);
if(tagFile.exists()){
if(tagFile.isDirectory()){
//是目录,遍历一层,遇鬼杀鬼,遇魔降魔
File[] files=tagFile.listFiles();
for(File file : files){
if(file.isDirectory()){
forceDeleteDirectory(file.getAbsolutePath());
}else {
forceDeleteFile(file.getAbsolutePath());
}
}
}else{
//不是目录,直接删除
forceDeleteFile(directory);
}
return "ok";
}else {
return "目录不存在";
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133509.html原文链接:https://javaforall.cn