前言
在系统上进行对文件的处理,这里主要是提供一下方法类,后续可以根据自己的需求进行定制;如果需要一个文件夹进行移动需要循环进行调用,因为考虑到有单个文件移动的情况,就没有写一个文件夹进行移动。
解析
在这里说一下我自己的理解,对于操作系统文件的理念就是,首先知道文件的地址,有这个参数基本就可以满足对文件进行操作了,
1.首先需要把路径声明成File XX=new File(地址)
2.然后根据需求是删除就进行循环判断是文件夹还是文件,(如果文件夹下存在文件,不能直接删除文件夹)是文件直接删除,是文件夹就进入文件夹下,做一个重复调用直到删除该文件夹下所有的具体文件。
3.完成操作后根据实际的测试结果做出调整,例如我这里的删除文件单单只是删除文件夹下的文件,而不是删除整个文件夹,所需需要在调用的地方再进行一次File XX=new File(地址),XX.delete();操作即可
地址可以是上传完文件的时候给他提前定好存放的位置并保存数据库或者是测试的时候直接鼠标点击查看文件路径都可以
/**
* 移除文件到另一个目录下;
* @param file 源文件(ZIP)
* @param deleteFolder 目标文件夹(文件存在的那个文件)
* 0.失败;1.存在;2.不存在是文件夹或文件
*/
public void RemoveZip(File file,String deleteFolder){
//文件存储路径:保存到数据库-删除目录
//url为需要存储文件的目的路径,大家根据所需进行填写即可,不需要参考我这里写的,因为我这里有引用到系统里的其他参数。
String url=deleteFolder+ StpUtil.getTokenInfo().getLoginId();
File dest = new File(url);
// 判断路径是否存在,如果不存在则创建
if (!dest.exists()) {
dest.mkdirs();
}
//声明文件
File s = new File(url+"/"+file.getName());
// 判断路径是否存在,如果存在进行删除
if (s.exists()) {
s.delete();
}
//移动目录
File dir = new File(url);
file.renameTo(new File(dir, file.getName()));
}
/**
* 移除文件到另一个目录下;
* @param file 源文件(文件)
* @param deleteFolder 目标文件夹(文件存在的那个文件)
* 0.失败;1.存在;2.不存在是文件夹或文件
*/
public void RemoveFile(File file,String deleteFolder,String packageName){
//文件存储路径:保存到数据库-删除目录
String url=deleteFolder+StpUtil.getTokenInfo().getLoginId()+"/"+packageName;
File dest = new File(url);
// 判断路径是否存在,如果不存在则创建
if (!dest.exists()) {
dest.mkdirs();
}
//移动目录
File dir = new File(url+"/");
file.renameTo(new File(dir, file.getName()));
}
/**
* 删除文件;
* @param file 源文件(文件)
*/
public static Boolean deleteFile(File file) {
//判断是否是文件
if(file.isDirectory()) {
//判断文件不为null或文件目录存在
if (file == null || !file.exists()) {
return false;
}
//获取目录下子文件
File[] files = file.listFiles();
//遍历该目录下的文件对象
for (File f : files) {
//判断子目录是否存在子目录,如果是文件则删除
if (f.isDirectory()) {
//递归删除目录下的文件
deleteFile(f);
} else {
//文件删除
f.delete();
//打印文件名
// System.out.println("文件名:" + f.getName());
}
}
//文件夹删除
file.delete();
}else {
file.delete();
}
// System.out.println("目录名:" + file.getName());
return true;
}
/**
* 判断包下的文件解压后是否存在同名的文件夹下,如果不存在则复制到同包名的文件夹下;
* @param fileHeader 遍历出来的子文件
* @param FileMAXPath 目标文件夹(文件存在的那个文件)
* @param FileMaxp 源文件夹(想要放到的文件夹下)
* @param fileNameM 压缩包名称
* 0.失败;1.存在;2.不存在是文件夹或文件
*/
//复制文件夹所有-》新文件夹
public static Integer copyFolder(FileHeader fileHeader, String FileMAXPath, String FileMaxp, String fileNameM) {
try {
if (fileHeader.getFileName().contains("/")) {
//判断是否在同包名下的文件
if (fileHeader.getFileName().substring(0, fileHeader.getFileName().indexOf("/")).equals(fileNameM)) {
// fileLibrary.setFilepath(pathFile + "/" + fileHeader.getFileName());
return 1;
} else {
String po = fileHeader.getFileName().substring(0, fileHeader.getFileName().lastIndexOf("/"));
//不是同包名的文件夹下需要移动到同包名下
File delepl = new File(FileMAXPath + "/" + po);
// 判断路径是否存在,如果不存在则创建
if (!delepl.exists()) {
delepl.mkdirs();
}
File oldName = new File(FileMaxp + "/" + fileHeader.getFileName());
File newName = new File(FileMAXPath + "/" + fileHeader.getFileName());
oldName.renameTo(newName);
return 2;
}
}
else {
//判断压缩包内是否存在目录
File delepl = new File(FileMAXPath);
// 判断路径是否存在,如果不存在则创建
if (!delepl.exists()) {
delepl.mkdirs();
}
File oldName = new File(FileMaxp + "/" + fileHeader.getFileName());
File newName = new File(FileMAXPath + "/" + fileHeader.getFileName());
oldName.renameTo(newName);
return 2;
}
} catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
return 0;
}
}