- 使用的环境依赖
import java.io.File;
import java.io.FileInputStream;
import java.nio.channels.FileChannel;
- 拷贝文件的方法NioToCopyFile
@SuppressWarnings("resource")
public static void NioToCopyFile(String source, String destin) throws Exception {
File sourcePath = new File(source);
File destinPath = new File(destin);
if (sourcePath.exists()) {
if (!destinPath.exists()) {
destinPath.mkdirs();
}
File[] items = sourcePath.listFiles();
FileChannel in = null;
FileChannel out = null;
for (File file : items) {
if (file.isFile()) {
long beginTime = System.currentTimeMillis();
try {
in = new FileInputStream(file).getChannel();
out = new FileOutputStream(destinPath + File.separator + file.getName()).getChannel();
in.transferTo(0, in.size(), out);
} catch (Exception e) {
throw e;
} finally {
in.close();
out.close();
long endTime = System.currentTimeMillis();
System.out.println("拷贝文件 " + file.getName() + " 大小:" + getPrintSize(file.length())
+ ", 用时:" + (endTime - beginTime) + " ms");
}
} else {
NioToCopyFile(file.getPath(), destinPath + File.separator + file.getName());
}
}
} else {
throw new NullPointerException("source is null");
}
}
- 转换文件大小的方法
public static String getFileSize(long fileSize) {
double value = (double) fileSize;
if (value < 1024) {
return String.valueOf(value) + " B";
} else {
value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
}
if (value < 1024) {
return String.valueOf(value) + " KB";
} else {
value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
}
if (value < 1024) {
return String.valueOf(value) + " MB";
} else {
value = new BigDecimal(value / 1024).setScale(2, BigDecimal.ROUND_DOWN).doubleValue();
return String.valueOf(value) + " GB";
}
}
- 调用方法testNioToCopyFile
@Test
public void testNioToCopyFile() {
try {
UploadFilesUtils.NioToCopyFile("D:\\softWare\\安装软件", "D:\\softWare\\testNio");
} catch (Exception e) {
e.printStackTrace();
}
}
- 结果
拷贝文件 apache-maven-3.5.zip 大小:8.54 MB, 用时:37 ms
拷贝文件 cn_office_professional_plus_2016_x86_x64_dvd_6969182.iso 大小:2.41 GB, 用时:30898 ms
拷贝文件 jdk_8_64.exe 大小:198.03 MB, 用时:3354 ms
拷贝文件 mysql-5.5.28-winx64.msi 大小:32.64 MB, 用时:1319 ms
拷贝文件 navicat120_premium_cs_x64.exe 大小:48.16 MB, 用时:920 ms
拷贝文件 node-v10.15.1-x64.msi 大小:16.51 MB, 用时:63 ms
拷贝文件 nodejs.zip 大小:48.51 MB, 用时:290 ms
拷贝文件 settings.xml 大小:10.22 KB, 用时:19 ms
拷贝文件 spring-tool-suite_64.zip 大小:361.2 MB, 用时:6923 ms
拷贝文件 TortoiseSVN1.11.0.zip 大小:25.84 MB, 用时:471 ms
拷贝文件 vdp-ui.rar 大小:30.65 MB, 用时:128 ms
拷贝文件 vdp-ui.zip 大小:1.86 MB, 用时:11 ms
拷贝文件 vdp-ui0.zip 大小:1.58 MB, 用时:11 ms
拷贝文件 vdp-ui0326.zip 大小:1.86 MB, 用时:15 ms
拷贝文件 vdp.rar 大小:30.95 MB, 用时:442 ms
拷贝文件 vdp0326.sql 大小:18.17 KB, 用时:18 ms
拷贝文件 VisualSVN-Server-3.9.3-x64.msi 大小:9.26 MB, 用时:253 ms
拷贝文件 VSCodeUserSetup-x64-1.31.1.exe 大小:46.66 MB, 用时:964 ms