今天是周一,周一的时候没有写日志,现在已经是周二的晚上了。真的烦,现在非常,特别,极其的想离职。下午去上班的时候眼角有翔划过。我感觉这样做不好吧,但是忍不住。很丧,非常丧,昨晚上和强哥聊了聊天,他找工作也不是很顺利。有点迷茫了。。怎么办好呢,哎,不管了,明天要不要请假回学校呢?请假回去的话,得把推荐信和成绩单打出来。请两天的假吗,行,要请就请两天的。哎,就这样,博客先结束了吧。

package homework;


import java.io.*;

/**
 * 1.复制文件是常见的IO操作,设计如下方法,实现复制源文件srcFile到目标文件destFile
 * 需要留意的是,read会返回实际的读取数量,有可能实际的读取数量小于缓冲的大小,
 * 那么把缓冲中的数据写出到目标文件的时候,就只应该写出部分数据。
 * 2.复制文件夹,实现如下方法,把源文件夹下所有的文件 复制到目标文件夹下(包括子文件夹)
 */
public class TestStream {
    //copyFile使用
    private static File srcFile = new File("D:\\xyz\\lol.txt");
    private static File destFile = new File("D:\\xyz\\lol2.txt");
    //copyFolder使用
    private static File srcFolder = new File("D:\\xyz");
    private static File destFolder = new File("D:\\abc");

    /**
     * @param srcFile 源文件
     * @param destFile 要将复制内容写入的文件
     */
    public static void copyFile(File srcFile,File destFile){
        //缓存区,一次性读取1024字节
        byte[] buffer = new byte[1024];
        //文件流的输入输出
        try (FileInputStream fis = new FileInputStream(srcFile);
             FileOutputStream fos = new FileOutputStream(destFile)){
            //System.out.println("开始读取");
            while (true){
                //实际读取的长度是 actuallyReaded,有可能小于1024
                int actuallyReaded = fis.read(buffer);
                //-1表示没有可读的内容了
                if (actuallyReaded == -1){
                    break;
                }
                fos.write(buffer,0,actuallyReaded);
                fos.flush();
                //System.out.println("复制完成");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void copyFolder(File srcFolder, File destFolder){
        if (!srcFolder.exists()){
            return;
        }
        if (!srcFolder.isDirectory()){
            return;
        }
        //此处逻辑,目标文件夹是文件就返回,不存在就创建文件夹
        if (!destFolder.exists()){
            destFolder.mkdirs();
        }
        if (destFolder.isFile()){
            return;
        }
        //以文件数组的形式,返回当前文件夹下的所有文件
        File[] files = srcFolder.listFiles();

        //for (int i = 0; i < files.length;i++) 尝试foreach
        for (File srcFile :
                files) {
            if (srcFile.isFile()) {
                File newdestFile = new File(destFolder, srcFile.getName());
                copyFile(srcFile, newdestFile);
            }
            //若是文件夹,则递归调用copyFolder
            if (srcFile.isDirectory()){
                File newdestFolder = new File(destFolder,srcFile.getName());
                copyFolder(srcFolder,newdestFolder);
            }
        }

    }

    public static void main(String[] args) {
        //copyFile(srcFile,destFile);
        copyFolder(srcFolder,destFolder);
    }

}