本程序可以复制文件,或者文件夹
用到io和递归的知识:
复制文件夹,要层层深入,因为文件夹中可能含有文件夹,复制时,要先创建这个新文件夹,所以要拼接路径.思路清楚即可
代码如下:
- package com.carlinfo.filetree;
-
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
-
- public class CopyFolder2 {
-
- public static void main(String[] args) {
- /* 准备源路径 */
- String path = "H:\\test2";
- File sourceFile = new File(path);
- /* 目标路径 */
- String path2 = "h:\\test\\c";
- File TargetFile = new File(path2);
- copy(sourceFile, TargetFile);
- System.out.println("复制成功!");
- }
-
- public static void copy(File sourceFile, File TarFile) {
- String str = "";
- /* 判断该文件是不是文件夹,是文件,直接复制文件 */
- if (!sourceFile.isDirectory()) {
- cy(sourceFile, TarFile);
- } else {
- str = TarFile.getPath() + "\\" + sourceFile.getName();
- System.out.println("--创建文件夹-->" + str);
- File fs = new File(str);
- fs.mkdir();
- /* 将该文件夹中的文件取出来 */
- File[] listFiles = sourceFile.listFiles();
- for (int i = 0; i < listFiles.length; i++) {
- /* 对文件夹遍历,判断是文件还是文件夹 */
- if (!listFiles[i].isDirectory()) {
- cy(listFiles[i], fs);
- } else {
- /* 如果是文件夹,继续调自己,递归 */
- copy(listFiles[i], fs);
- }
-
- }
- }
- }
-
- /**
- * 复制文件
- * 用到io字节流
- *
- * @param sourceFile
- * @param TarFile
- */
- public static void cy(File sourceFile, File TarFile) {
- /* 用于拼装路径,因为目标文件不存在 */
- String str = "";
- /* 准备管子 */
- FileInputStream fis = null;
- FileOutputStream fos = null;
- BufferedInputStream bis = null;
- BufferedOutputStream bos = null;
- /* 准备容器 */
- byte[] b = new byte[1024];
- /* 拼装路径 */
- str = TarFile.getPath() + "\\" + sourceFile.getName();
- System.out.println("--创建文件--" + str);
- File file = new File(str);
- try {
- file.createNewFile();
-
- fis = new FileInputStream(sourceFile);
- bis = new BufferedInputStream(fis);
-
- fos = new FileOutputStream(file);
- bos = new BufferedOutputStream(fos);
-
- int len = 0;
- while ((len = bis.read(b)) != -1) {
- /* 写数据 */
- bos.write(b, 0, len);
- }
- bos.flush();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (bis != null) {
- /* 记得关闭管子 */
- bis.close();
- bis = null;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- if (bos != null) {
- /* 关闭管子 */
- bos.close();
- bos = null;
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- }
- }