2021SC@SDUSC
删除文件方式:
package test816;
import java.io.File;
public class DeleteFileUtil {
/**
* 删除文件,可以是单个文件或文件夹
*
* @param fileName
* 待删除的文件名
* @return 文件删除成功返回true,否则返回false
*/
public static boolean delete(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
System.out.println("删除文件失败:" + fileName + "文件不存在");
return false;
} else {
if (file.isFile()) {
return deleteFile(fileName);
} else {
return deleteDirectory(fileName);
}
}
}
/**
* 删除单个文件
*
* @param fileName
* 被删除文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
if (file.isFile() && file.exists()) {
file.delete();
System.out.println("删除单个文件" + fileName + "成功!");
return true;
} else {
System.out.println("删除单个文件" + fileName + "失败!");
return false;
}
}
/**
* 删除目录(文件夹)以及目录下的文件
*
* @param dir
* 被删除目录的文件路径
* @return 目录删除成功返回true,否则返回false
*/
public static boolean deleteDirectory(String dir) {
// 如果dir不以文件分隔符结尾,自动添加文件分隔符
if (!dir.endsWith(File.separator)) {
dir = dir + File.separator;
}
File dirFile = new File(dir);
// 如果dir对应的文件不存在,或者不是一个目录,则退出
if (!dirFile.exists() || !dirFile.isDirectory()) {
System.out.println("删除目录失败" + dir + "目录不存在!");
return false;
}
boolean flag = true;
// 删除文件夹下的所有文件(包括子目录)
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
if (!flag) {
break;
}
}
// 删除子目录
else {
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag) {
break;
}
}
}
if (!flag) {
System.out.println("删除目录失败");
return false;
}
// 删除当前目录
if (dirFile.delete()) {
System.out.println("删除目录" + dir + "成功!");
return true;
} else {
System.out.println("删除目录" + dir + "失败!");
return false;
}
}
// 删除文件夹
// param folderPath 文件夹完整绝对路径
public static void delFolder(String folderPath) {
try {
delAllFile(folderPath); // 删除完里面所有内容
String filePath = folderPath;
filePath = filePath.toString();
java.io.File myFilePath = new java.io.File(filePath);
myFilePath.delete(); // 删除空文件夹
} catch (Exception e) {
e.printStackTrace();
}
}
// 删除指定文件夹下所有文件
// param path 文件夹完整绝对路径
public static boolean delAllFile(String path) {
boolean flag = false;
File file = new File(path);
if (!file.exists()) {
return flag;
}
if (!file.isDirectory()) {
return flag;
}
String[] tempList = file.list();
File temp = null;
for (int i = 0; i < tempList.length; i++) {
if (path.endsWith(File.separator)) {
temp = new File(path + tempList[i]);
} else {
temp = new File(path + File.separator + tempList[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + tempList[i]);// 再删除空文件夹
flag = true;
}
}
return flag;
}
public static void main(String[] args) {
// String fileName = "g:/temp/xwz.txt";
// DeleteFileUtil.deleteFile(fileName);
String fileDir = "D:\\temp\\pom.xml";
// DeleteFileUtil.deleteDirectory(fileDir);
DeleteFileUtil.delete(fileDir);
DeleteFileUtil t = new DeleteFileUtil();
delFolder("c:/bb");
System.out.println("deleted");
}
}
首先就是控制类代码
//删除图片文件,只是删除文件,不删除数据库信息
@PostMapping("/deleteFile")
@ResponseBody
public String delFile(String path) {
//上篇中前端穿过来的是/imctemp-rainy/*.jpg格式的,只需要取出最后的文件名,写死路径,就可以准确找到文件了
//前端页面处理路径,
//var imgpath=path.split("/");
//imgpath = imgpath[imgpath.length-1];
String resultInfo = null;
//System.out.println(path);///imctemp-rainy/2.jpg
int lastIndexOf = path.lastIndexOf("/");
String img_path = path.substring(lastIndexOf + 1, path.length());
//System.out.println(img_path);
img_path = "E:/ExerciseSpace/SpringBoot/imageg/" + img_path;
//System.out.println(img_path);//输出测试一下文件路径是否正确
File file = new File(img_path);
if (file.exists()) {//文件是否存在
if (file.delete()) {//存在就删了,返回1
resultInfo = "1";
} else {
resultInfo = "0";
}
} else {
resultInfo = "文件不存在!";
}
return resultInfo;
}
前端页面代码
<div class="label">
<label>图片:</label>
</div>
<div class="field">
<p id="url">
<img :src="menu.bbimg" width="100px" height="100px " id="img" ><!-- menu.bbimg这个是我从后端获取后的图片链接,要改成自己的 -->
<label>
<input type="button" value="取消图片" v-on:click="delphoto(menu.bbid,menu.bbimg)"/><!-- 参数传的是这条数据的id(为数据库中信息删除做准备,有备无患),第二个是图片的链接。也可以只传id,然后用id查出图片的链接,但是我懒的在写方法了,就直接一块传过去了 -->
</label>
</div>
//取消图片,删除图片,将图片数据库信息修改为null
delphoto:function(bbid,path){
//alert(123);
var imgpath=path.split("/");
imgpath = imgpath[imgpath.length-1];
//alert(imgpath);
$.post("/bannerlower/deleteFile",{path:imgpath},function(data){
if(data=="1"){//到了这里,本地的图片数据就删除了,但是数据库信息没删,下面就是删除数据库信息了,懒得删了,就一块说下
//alert("图片删除");
//我后端是用的修改,跟其他方法共用的一个,思路就是根据id,把数据库中图片的信息改为null就可以了,所以传了id跟图片链接,并且图片链接为空
$.post("/bannerlower/editimg",{bbid:bbid,imgpath:null},function(data){
if(data=="1"){
//alert("图片信息删除");
//window.location.href="/admin/bannerloweredit?bbid="+bbid;
$("#img").attr("src","/imctemp-rainy/no.png");//删除后,让一个默认图片补上空缺,增强用户的体验。
}
})
}
});
},