Java使用字节型文件流完成文件夹的复制(递归)
对于程序而言,文件夹的深度是不可预知的,因此想要对其进行删除、复制粘贴、加密解密等等操作,都需要使用递归。
这里仅仅演示文件夹的复制粘贴。(复制单个文件肯定也是没问题的)
演示:将E:\test\dirc复制到F:\test路径下。
程序代码:
package com.rjxy;
import java.io.*;
public class FileSuperCopy {
public void superCopy(String path,String objPath){
File file = new File(path);
String oldFileName = file.getName();//获取要复制的文件夹名称或文件名称
String newFilePath = objPath+"\\"+oldFileName;
File objFile = new File(newFilePath);
File[] lists = file.listFiles();
if (lists!=null){
//说明它是一个文件夹
//例如:E:\test\dirc
objFile.mkdir();//在目标路径创建好空的文件夹
System.out.println(objFile.getName()+">文件夹复制成功");
if (lists.length!=0){
for(File f:lists){
superCopy(f.getAbsolutePath(),objFile.getAbsolutePath());
}
}
}else{
//说明它是一个文件
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream(file);
fos = new FileOutputStream(objFile);
byte[] bytes = new byte[1024];
int count = fis.read(bytes);
while (count!=-1){
fos.write(bytes,0,count);
fos.flush();
count = fis.read(bytes);
}
System.out.println(objFile.getName()+">文件复制成功!");
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (fis!=null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if (fos!=null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
FileSuperCopy fsc = new FileSuperCopy();
String oldPath = "E:\\test\\dirc";
String newPath = "F:\\test";
fsc.superCopy(oldPath,newPath);
}
}
打印日志:
dirc>文件夹复制成功
aaa>文件夹复制成功
innera>文件夹复制成功
innera.txt>文件复制成功!
innerinnera>文件夹复制成功
innerinnera.txt>文件复制成功!
inneraa>文件夹复制成功
inneraa.txt>文件复制成功!
inneraaa>文件夹复制成功
bbb>文件夹复制成功
b>文件夹复制成功
1.txt>文件复制成功!
2.txt>文件复制成功!
bb>文件夹复制成功
11.txt>文件复制成功!
22.txt>文件复制成功!
bbb>文件夹复制成功
ccc>文件夹复制成功
cc.txt>文件复制成功!
innerc>文件夹复制成功
c.txt>文件复制成功!
cc.txt>文件复制成功!
ccc.txt>文件复制成功!
结果: