Java基础学习笔记总结(1)目录拷贝,递归方法,java代码实现。

代码思路:

首先读取要拷贝的目录,然后根据这个目录的类型(目录/文件)进行分类,如果是目录,就递归调用子目录,如果是文件,就用IO流进行读取和写入。

新目录和新文件的创建涉及到字符串的拼接,这里要用绝对路径。

关于代码中的几个方法,可以网上查询,对于java常用类中的方法,我也会在后面总结一下。

package IOStreamTest;
//拷贝目录
import java.io.*;

public class FileTest {
    public static void main(String[] args) {
        File file = new File("C:\\Users\\lenovo\\Desktop\\JAVASE\\002-JavaSE每章作业");
        File file2=new File("D:\\");
        fileCopy(file,file2);
    }
    public static void fileCopy(File file,File file2){
        //判断file是否为文件,如果是文件,则用文件输入输出流进行文件的复制。
        if(file.isFile()){
            //在这里创建in和out引用,使其作用域在if里面整个区域,保证后面可以关闭。
            FileInputStream in = null;
            FileOutputStream out=null;
            try {
                in =new FileInputStream(file);
                //这里用了一个三目运算符解决file2的绝对路径以\\结尾的情况,通过+实现字符串拼接。
                out =new FileOutputStream((file2.getAbsolutePath().endsWith("\\")?file2.getAbsolutePath():file2.getAbsolutePath()+"\\")+file.getAbsolutePath().substring(3));
                byte[] bytes=new byte[1024*1024];
                //flag表示读取的字符数量
                int flag=0;
                while((flag=in.read(bytes))!=-1){
                    out.write(bytes,0,flag);
                }
                out.flush();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                if (in != null) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(out!=null){
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;
        }
        //这个listFiles方法是获取子目录
        File[] files = file.listFiles();
        //增强for循环
        for(File fileTest:files){
            if(fileTest.isDirectory()){
                String translate = fileTest.getAbsolutePath();
                //System.out.println("ML"+translate.substring(3));
                //System.out.println((file2.getAbsolutePath().endsWith("\\")?file2.getAbsolutePath():file2.getAbsolutePath())+"\\"+translate.substring(3));
                File newDir=new File((file2.getAbsolutePath().endsWith("\\")?file2.getAbsolutePath():file2.getAbsolutePath()+"\\")+translate.substring(3));
                if(!newDir.exists()){
                    newDir.mkdirs();
                }
            }
            fileCopy(fileTest,file2);
        }
    }
}

如果有优化建议或者疑问,欢迎在评论区留言。

上一篇:2021-09-26


下一篇:Linux过滤文件内特殊字符并写入新的文件