pom
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
线程类
package com.luding.diankan.task;
import lombok.Data;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.Callable;
import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
/**
* 移动文件
*
* @param
* @author zhushangjin
* @date 2021/9/30
* @return
*/
@Data
public class MoveFileTask implements Callable<String> {
//源文件
File fromFile;
//目的文件
File toFile;
@Override
public String call() throws IOException {
Path moveFrom = Paths.get(fromFile.getAbsolutePath());
Path moveTo = Paths.get(toFile.getAbsolutePath());
//复制文件
Files.copy(moveFrom, moveTo, REPLACE_EXISTING, COPY_ATTRIBUTES);
//删除源文件
Files.delete(moveFrom);
return DigestUtils.md5Hex(new FileInputStream(moveTo.toFile().getAbsolutePath()));
}
}
使用
//移动文件线程池
ThreadPoolExecutor moveFilePoolExecutor = new ThreadPoolExecutor(5, 5, 60,
TimeUnit.HOURS,
new LinkedBlockingQueue<>(),
new ThreadPoolExecutor.CallerRunsPolicy());
ListeningExec