关于文件夹到文件夹级别的io流复制
首先介绍一种直观的io流文件夹复制到文件夹
import java.io.*;
import java.util.ArrayList;
public class HexIO3 {
public static void main(String[] args) throws IOException {
//将文件放入LIST中
ArrayList<File> list = new ArrayList<>();
File f1 = new File("C:\\Users\\Dier\\Desktop\\java网络编程\\test1");
File[] files = f1.listFiles();
for (int i = 0; i < files.length; i++) {
list.add(files[i]);
}
ArrayList<File> list2 = new ArrayList<>();
File f2 = new File("C:\\Users\\Dier\\Desktop\\java网络编程\\test2");
File[] files2 = f2.listFiles();
for (int i = 0; i < files2.length; i++) {
list2.add(files2[i]);
}
//设置标记,循环查找有没有重复(比较文件名字)
int count = 0;
for (int i=0 ;i<list.size();i++){
for (int j=0;j<list2.size();j++){
if (list.get(i).getName().equals(list2.get(j).getName()))
count = 1;
}
}
System.out.println(count);
//复制
if (count == 0){
for (int i=0;i<list.size();i++) {
FileInputStream in = new FileInputStream(new File("C:\\Users\\Dier\\Desktop\\java网络编程\\test1\\"+list.get(i).getName()));
FileOutputStream out = new FileOutputStream(new File("C:\\Users\\Dier\\Desktop\\java网络编程\\test2",list.get(i).getName()));
byte[] bytes = new byte[1024];
int readByte = 0;
while ((readByte =in.read(bytes) ) !=-1){
out.write(bytes,0,readByte);
}
out.close();
in.close();
}
}else {
System.out.println("有相同文件!!!!!!");
}
}
}
这里还有很多地方可以优化,查重的策略等等。
还有一个我参考了网上和同学的资料的递归复制。
public class CopyFile {
public static void main(String[] args) {
CopyFile cf = new CopyFile();
cf.copyFolder("a", "b");
}
public void copyFolder(String oldPath, String newPath) {
try {
(new File(newPath)).mkdirs(); //如果文件夹不存在 则建立新文件夹
File a = new File(oldPath);
String[] files=a.list();
File temp=null;
for (int i=0;i<files.length;i++) {
if(oldPath.endsWith(File.separator)){
temp = new File(oldPath+files[i]);
}else{
temp = new File(oldPath+File.separator+files[i]);
}
if(temp.isFile()){
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath + "/" +(temp.getName()).toString());
byte[] b = new byte[1024 * 5];
int len;
while ((len = input.read(b)) != -1) {
output.write(b, 0, len);
}
output.flush();
output.close();
input.close();
}
if(temp.isDirectory()){//如果是子文件夹
copyFolder(oldPath+"/"+files[i],newPath+"/"+files[i]);
}
}
} catch (Exception e) {
System.out.println("复制整个文件夹内容操作出错");
e.printStackTrace();
}
}
}