- /**
- * 实现功能:将文件或文件夹,按照原有目录层次复制到目标文件夹
- *
- */
- package jiangliang;
- import java.util.*;
- import java.io.*;
- class CopyAllFiles{
-
- public static void main(String[] args) throws Exception{
-
- copy("c:\\aaa","d:\\");//测试
- }
- /**
- * 将getFiles() 和 copyFromArray() 组合,并且复制的可以是文件或文件夹
- * @param srcPath
- * @param tarPath
- * @throws IOException
- */
- public static void copy(String srcPath,String tarPath) throws IOException{
-
- File srcFile = new File(srcPath);
- ArrayList<String> ar = new ArrayList<>();
-
- if(srcFile.isFile()){
- ar.add(srcPath);
- copyFromArray(ar,tarPath);
- }
- else {
- getFiles(new File(srcPath),ar);
- copyFromArray(ar,tarPath);
- }
-
- }
- /**
- * 遍历一个存放文件路径的ArrayList集合,逐个复制套目标文件夹
- * @param ar:存放文件路径的ArrayList集合
- * @param toPath:目标文件夹路径
- * @throws IOException
- */
- public static void copyFromArray(ArrayList<String> ar,String toPath) throws IOException{
- //replaced:获取要复制文件的父文件夹路径,这个父路径字符串替换成目标文件夹路径,就是集合中每个
- // 文件和文件夹路径将要复制到的目标路径
- String replaced = new File(ar.get(0)).getParent();
-
- for(String s:ar){
- File file = new File(s);
- File toFile = new File(s.replace(replaced, toPath));//根据源文件路径,计算 目标文件路径
- if(file.isDirectory())
- toFile.mkdirs();
- else{
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(toFile));
- byte[] b = new byte[1024];
- int len = 0;
- while((len = bis.read(b))!=-1){
- bos.write(b,0,len);
- bos.flush();
- }
- bis.close();
- bos.close();
- }
-
- }
-
- }
- /**
- * 遍历文件夹,返回所有子文件及文件夹路径
- * @param file:要拷贝的文件夹(必须是文件夹)
- * @param ar:返回的ArrayList<String>
- */
- public static void getFiles(File file,ArrayList<String> ar){
- File[] files = file.listFiles();
- ar.add(file.getAbsolutePath());
- for(File f:files){
- if(f.isDirectory())
- getFiles(f,ar);
- else
- ar.add(f.getAbsolutePath());
- }
-
- }
-
- }
复制代码 |
|