/**
* @Description: 下载名为两个日期之间所有时间的文件夹下的图片
* @Param: startDate:开始时间 endDate:结束时间
* @return:
* @Author: RenHuiBin
* @Date: 2023/1/16 0016
*/
@PostMapping("/downloadPictureMultiple")
@ResponseBody
public Result downloadPictureMultiple(String startTime, String endTime) {
//1.查询两个日期间的所有图片文件夹(因存储时按照时间格式存储)
String writeFilesPath = getFilePath2();//上传文件的路径
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 拿到的所有文件夹集合
List<String> Timelist = new ArrayList<String>();
try {
// 转化成日期类型
Date startDate = sdf.parse(startTime);
Date endDate = sdf.parse(endTime);
//用Calendar 进行日期比较判断
Calendar calendar = Calendar.getInstance();
while (startDate.getTime() <= endDate.getTime()) {
// 把日期添加到集合
Timelist.add(sdf.format(startDate));
// 设置日期
calendar.setTime(startDate);
//把日期增加一天
calendar.add(Calendar.DATE, 1);
// 获取增加后的日期
startDate = calendar.getTime();
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
//Timelist = 需要查询文件夹的日期们
String path = "D:/JHTemp/qyyw"; //不带日期文件夹路径
File file = new File(path);
File[] files = file.listFiles();
for (int i = 0; i < Timelist.size(); i++) {
String writeFilesPaths = writeFilesPath + "/" + Timelist.get(i);//拼接写入文件的路径
String readFilesPath = path + "/" + Timelist.get(i);//拼接读取文件的路径
String[] readPathList = readFilesPath.split(",");
String[] writePathList = writeFilesPaths.split(",");
int length = 0;
if (writePathList.length >= readPathList.length) {
//验证1
length = readPathList.length;
} else if (writePathList.length < readPathList.length) {
//验证2
length = writePathList.length;
}
for (int l = 0; l < length; l++) {
readAndWrite(readPathList[l], writePathList[l]);//调用内部方法读取,复制
}
}
return Result.ok(writeFilesPath);
}
/**
* @Description: 读取文件夹文件复制到指定目录
* @Param:read:读取目录 write输入目录
* @return: String 返回异常字符串
* @Author: RenHuiBin
* @Date: 2023/1/16 0016
*/
private static void readAndWrite(String read, String write) {
System.out.println("读取文件START");
StopWatch stopWatch = new StopWatch();
stopWatch.start();
File file = new File(read);
if (file.isDirectory()) {
File[] filePathLists = file.listFiles();
for (int i = 0; i < Objects.requireNonNull(filePathLists).length; i++) {
if (filePathLists[i].isFile()) {
if (!new File(write).exists()) {
new File(write).mkdir();
//java中File类自带一个检测方法exists可以判断文件或文件夹是否存在,一般与mkdirs方法(该方法相较于mkdir可以创建包括父级路径,推荐使用该方法)或者createNewFile方法合作使用。
System.out.println("未获取到符合上传条件的文件目录,创建目录:" + new File(write).getName());
}
boolean upload = false;
try {
FileInputStream fis = new FileInputStream(filePathLists[i]);
FileOutputStream fos = new FileOutputStream(new File(write, filePathLists[i].getName()));
copy(fis, fos);
fis.close();//释放流输入
fos.close();//释放流输出
upload = true;
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传文件异常");
}
if (upload) {
System.out.println("上传文件:" + filePathLists[i].getName() + "成功");
} else {
System.out.println("上传文件:" + filePathLists[i].getName() + "失败");
}
}
}
} else {
System.out.println("未获取到符合读取条件的文件目录");
}
stopWatch.stop();
System.out.println("读取并上传文件END,耗时:{} S" + stopWatch.getTime());
}
/**
* @Description: 判断windows系统或者Linux系统的上传文件路径是否存在如果存在则返回路径
* @Param: null
* @return: 系统路径
* @Author: RenHuiBin
* @Date: 2023/1/16 0016
*/
public static String getFilePath2() {
String osName = System.getProperty("os.name");
if (osName.startsWith("Linux")) {
return "/jhkj/upload/qyyw_CheckAttendance";
} else {
File dir = new File("D:/JHTemp/qyyw_CheckAttendance");
if (!dir.isDirectory()) {
File dire = new File("E:/JHTemp/qyyw_CheckAttendance");
if (!dire.isDirectory()) {
File dirf = new File("F:/JHTemp/qyyw_CheckAttendance");
if (!dirf.isDirectory()) {
File dirg = new File("G:/JHTemp/qyyw_CheckAttendance");
if (!dirg.isDirectory()) {
return "C:/JHTemp/qyyw_CheckAttendance";
} else {
return "G:/JHTemp/qyyw_CheckAttendance";
}
} else {
return "F:/JHTemp/qyyw_CheckAttendance";
}
} else {
return "E:/JHTemp/qyyw_CheckAttendance";
}
} else {
return "D:/JHTemp/qyyw_CheckAttendance";
}
}
}
需求是点击页面按钮选择两个时间,获取电脑某个文件夹下的照片(图片存储在命名为时间的文件夹下)复制到另个一文件夹,有则复制,没有则创建