效率!使用Java快速复制文件
1.你是否有过烦恼
在日常工作里,你是否遇到过批量复制文件的case?你是否时常摇头叹息,痛骂傻X老板?你是否在经常腰酸背痛,体力透支?你是否。。。哈哈哈,相信好多小伙伴都遇到过这种情况,明明是很简单的事情,但就是要不停地重复处理。
那如何高效处理这种低级劳动呢?今天,给大家带来一个技术含量不高,但是比较实用的技术---使用Java来复制文件。
2.来吧,解放双手
我们来分析一下逻辑。我们要完成复制,那么至少需要两个参数,第一个是原文件夹oldPath,第二个是目标文件夹newPath。有了这两个参数,我们就可以往下进行了。首先,我们要遍历oldPath文件夹,找出要复制的文件,然后执行复制操作。整个流程如下:
- 给定参数oldPath,newPath
- 遍历oldPath
- 执行复制方法
下面我们来完成上面的逻辑:
/**
* 复制一个文件夹文件到另一个目录
*
* @param oldPath 源文件夹
* @param newPath 新文件夹
*/
public int copyFile(String oldPath, String newPath) {
//想看复制耗时,可以打开这行代码
//long startTime = System.currentTimeMillis();
File oldFile = new File(oldPath);
File file = new File(newPath);
File[] filesNames = oldFile.listFiles();
for (File filesName : filesNames) {
try {
FileInputStream in = new FileInputStream(oldFile + "\\" + filesName.getName());
FileOutputStream out = new FileOutputStream(file + "\\" + filesName.getName());
byte[] buffer = new byte[1024];
int readByte = 0;
while ((readByte = in.read(buffer)) != -1) {
out.write(buffer, 0, readByte);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
log.info("已经完成对《" + oldPath + "》文件夹的" + filesNames.length + "个文件的复制");
//想看复制耗时,可以打开这行代码
//long endTime = System.currentTimeMillis();
//log.info("已复制完毕,一共用时" + (endTime-startTime) + "ms");
return filesNames.length;
}
此时,只要我们给出两个路径参数,就可以完成相应复制
3.多文件循环操作
有的时候,我们要操作的并不是一个文件夹,而是多个文件夹,此时怎么做呢?
此时给大家提供一个思路:
/**
* 有时候,我们要复制的文件包含多个子文件夹
* 这里为大家提供一个思路:就是循环调用copyFile方法
* 只要能提供String oldPath, String newPath这两个参数就行
* 有条件的可以多线程
*
* @param oldParentPath
* @param newPath
*/
public void copyMultiFile(String oldParentPath, String newPath) {
File oldParentFile = new File(oldParentPath);
File[] filesNames = oldParentFile.listFiles();
//这里应该做判空处理,但是不会有人复制空文件夹吧。
for (File filesName : filesNames) {
int i = copyFile(filesName.toString(), newPath);
}
}
是不是很简单?就是加一层循环。让每一次循环来为我们提供两个路径参数就好了。
4.加速!---多线程
声名:因为对多线程编程还很生疏,不确定以下内容是否准确,但是应该80%的可能是准确的,哈哈哈。下面来讲讲如何多线程调用我们的工具类!首先我们用threadDemo继承Thread,提供两个路径参数,并给出构造方法,然后重写run方法,在run方法里重写你要执行的方法。
static class threadDemo extends Thread{
private String oldParentPath;
private String newPath;
public threadDemo(String oldParentPath, String newPath) {
this.oldParentPath = oldParentPath;
this.newPath = newPath;
}
@Override
public void run() {
copyFile2OtherUtils cf = new copyFile2OtherUtils();
long startTime = System.currentTimeMillis();
cf.copyMultiFile(oldParentPath,newPath);
long endTime = System.currentTimeMillis();
log.info("已复制完毕,一共用时" + (startTime-endTime) + "ms");
}
}
那如何使用呢?我们只需要在main方法中实例化threadDemo:
public static void main(String[] args) {
threadDemo demo1 = new threadDemo(oldFilePath1,newFilePath1);
demo1.start();
threadDemo demo2 = new threadDemo(oldFilePath2,newFilePath2);
demo2.start();
//...
}
此时我们就可以多线程复制文件啦!充分利用你的设备,哈哈哈。
-
[x] 我们的征途是星辰大海。我就是我,我就是天!
-
[x] 疾风亦有龟途对本文享有版权,转载请标明原文链接,禁止复制!
-
[x] 欢迎访问我的个人博客网站---->夙夜星辰叹
-
[x] 欢迎关注我的微信公众号:
版权属于: 依依东望