- <P> import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;</P>
- <P>/**
- * 这是拷贝文件的类
- *
- * @author ZhangZhiHui
- *
- */
- public class Copy {
- /**
- * 拷贝文件或者文件夹
- *
- * @param source
- * 被拷贝的源文件
- * @param destination
- * 拷贝的目的文件
- * @throws IOException
- * 异常
- */
- public static void copy(String source, String destination)throws IOException {
- //实例化源文件
- File srcFile = new File(source);
- //实例化目标文件
- File dntFile = new File(destination);
- //声明输入字节流对象
- BufferedInputStream bis;
- //声明输出流对象
- BufferedOutputStream bos;
-
- //判断源文件是否存在,如果不存在输出一句话
- if(srcFile.exists()==false){
- System.out.println("不好意思,文件不存在!!!");
- }
-
- /*
- * 下面是源文件不是文件夹的情况下
- * 目标文件有三种情况:
- * 一.是文件夹
- * 判断文件夹是否存在,不存在就创建,然后在复制源文件到目标文件
- * 二.是文件
- * 判断文件是否存在,不存在就创建,然后复制
- *
- */
-
- // 判斷源文件是否是文件夾,如果不是則進入代碼塊
- if (!srcFile.isDirectory()) {
-
- //一.判斷目標文件是否是文件夾,is true則執行
- if (dntFile.isDirectory()) {
-
- //判斷:如果這個文件夾不存在就創建此文件夾
- if (dntFile.exists()==false) {
-
- dntFile.createNewFile();
-
- }
- // 创建输入流并抓取源文件
- bis = new BufferedInputStream(new FileInputStream(srcFile));
-
- /*
- * 创建输出流并抓取目标文件; 把源文件複製在目標文件夾里
- * 思路: 1.重新創建目標文件: 用getPath獲得原有的路徑在追加源文件的文件名
- * 2.複製文件: 用出入流讀取源文件,然後用輸出流寫在目標文件里
- */
-
- //1.重建目標文件夾
- File file = new File(dntFile.getPath()+"<A href='file://\\"+srcFile.getName'>\\"+srcFile.getName</A>());
- file.createNewFile();
-
- //2.複製文件
-
- //創建輸出流
- bos = new BufferedOutputStream(new FileOutputStream(file));
- // 声明并把在源文件读到的内容赋给content变量
- int content = bis.read();
- while (content != -1)// 判断是否还有内容可读
- {
- bos.write(content);
- content = bis.read();
- }
- bis.close();
- bos.close();
-
- }else{
- //二.目標文件是文件則進入
-
- //判斷目標文件如果不存在,就創建此文件
- if (dntFile.exists()==false) {
- dntFile.mkdirs();
- }
- // 创建输入流并抓取源文件
- bis = new BufferedInputStream(new FileInputStream(srcFile));
-
- // 创建输出流并抓取目标文件
- bos = new BufferedOutputStream(new FileOutputStream(dntFile));
-
- // 声明并把读到的内容赋给content变量
- int content = bis.read();
- while (content != -1)// 判断是否还有内容可读
- {
- //输出文件内容
- bos.write(content);
-
- //接收读到的内容
- content = bis.read();
- }
-
- //关闭流
- bis.close();
- bos.close();
-
- }
-
-
- /*
- * 下面情况是源文件是文件夹的时候
- * 源文件是文件夹,目标文件就有三种可能分别是:
- * 一.是文件夹
- * 判断是否存在,不存在创建
- * 如果是文件,就把源文件夹复制到目标文件
- * 二.是文件
- *
- * 如果是文件就输出一句话 :"被拷贝的是文件夹,文件夹不能放在文件里"
- *
- *
- */
-
- //如果源文件是文件夹进入
- } else if (srcFile.isDirectory()) {
-
- /*
- * 一.是文件夹
- * 思路:
- * 1.首先重建目标文件用getPath获取目标文件的绝对路径,然后追加源文件路径,用源文件的getName方法获得文件名并创建
- * 2.用listFiles方法获得源文件的所有文件名,在目标文件夹中重新创建源文件中的文件,最后复制内容
- */
-
- //1.重建文件
- File file= new File(dntFile.getPath()+"<A href='file://\\"+srcFile.getName'>\\"+srcFile.getName</A>());
-
- //新建文件夹
- file.mkdirs();
-
- //2.获得源文件文件名集合
- File[] files=srcFile.listFiles();
-
- //如果不是空文件时
- if (files!=null) {
- //循环创建文件输出流和文件输出流
- for (int i = 0; i < files.length; i++) {
- //输入流
- BufferedInputStream bis2 = new BufferedInputStream(new FileInputStream(new File(srcFile.getPath()+"<A href='file://\\"+files[i].getName'>\\"+files[i].getName</A>())));
- //输出流
- BufferedOutputStream bos2 = new BufferedOutputStream(new FileOutputStream(new File(file.getPath()+"<A href='file://\\"+files[i].getName'>\\"+files[i].getName</A>())));
-
- //content变量接收读到的内容
- int content = bis2.read();
- while (content != -1)// 判断是否还有内容可读
- {
- //输出内容到目标文件
- bos2.write(content);
- content = bis2.read();
- }
-
- //二.判断目标文件是否是文件,是文件执行
- if (dntFile.isDirectory()==false) {
- System.out.println("被拷贝的是文件夹,文件夹不能放在文件里");
- }
- //关闭流
- bis2.close();
- bos2.close();
- }
-
-
- }
- }
-
- }</P>
- <P>}
- </P>
复制代码
|
|