当前位置 博文首页 > Mrwhite86:java进阶(34)--File类、目录复制

    Mrwhite86:java进阶(34)--File类、目录复制

    作者:Mrwhite86 时间:2021-01-30 15:36

    一、File类的理解

    1、File类不能完成文件的读与写。

    2、FIle类代表:文件或目录的路径名的抽象表示形式。

     

    二、FIle类常用方法:

    1、创建一个FIle对象:File()

    File f1=new File("D:\\javaTest\\fileTest02");

    2、判断File对象是否存在:exists()

    System.out.println(f1.exists());

    3、新建文件:createNewFile()

    f1.createNewFile();

    4、新建文件夹:mkdir()

    f1.mkdir();

    5、创建多重目录:mkdirs()

            File f2=new File("D:\\javaTest\\a\\b\\c");
            if(!f2.exists()){
                f2.mkdirs();
            }

    6、获取父级目录:getParent()

            File f2=new File("D:\\javaTest\\a\\b\\c");
            if(!f2.exists()){
                f2.mkdirs();
            }
            String parentPath=f2.getParent();
            System.out.println(parentPath);

    执行结果:D:\javaTest\a\b

    7、获取绝对路径目录:getAbsolutePath()

            File f3=new File("hello\\test01");
            System.out.println(f3.getParent());
            System.out.println(f3.getAbsolutePath());

    查看执行结果:

    hello
    C:\Users\Mr.White\IdeaProjects\javaAdvance\hello\test01

    8、获取名称:getName()

    9、获取绝对文件名:getAbsoluteFile()

            File f4=new File("abc");
            System.out.println(f3.getName());
            System.out.println(f3.getAbsoluteFile());

    查看执行结果:

    test01
    C:\Users\Mr.White\IdeaProjects\javaAdvance\hello\test01

    10、判断路径是否是一个文件:isFile()

    11、判断路径是否是一个目录:isDirectory()

            File f1=new File("D:\\javaTest\\test01.txt");
            f1.createNewFile();
            System.out.println(f1.isFile());
            System.out.println(f1.isDirectory());

    查看执行结果:

    true
    false

    12、获取最后一次修改时间,结果为13位时间戳:lastModified()

    System.out.println(f1.lastModified());

    13、获取文件的大小,单位字节:length()

    System.out.println(f1.length());

    14、获取当前目录下所有子文件,返回FIle数组:listFiles()

            File f=new File("D:\\javaTest");
            File[] files=f.listFiles();
            for(File file:files){
                System.out.println(file.getAbsolutePath());
            }

     

    三、目录拷贝,将C:\\test01目录下内容拷贝至D:\\test01目录下

     使用FIle类,流集合递归完成。

     1 package JAVAADVANCE;
     2 import java.io.*;
     3 import java.lang.reflect.Field;
     4 public class TestAdvance34FileTest03Copy {
     5     public static void main(String[] args) throws IOException {
     6         //拷贝源.
     7         File srcFile = new File( "c:\\test01");
     8         //拷贝目标
     9         File destFile = new File( "D:\\");
    10         //调用方法拷贝
    11         copyDir(srcFile, destFile);
    12         }
    13     private static void copyDir(File srcFile, File destFile) {
    14         if(srcFile.isFile()) {
    15             // srcFile如果是一个文件的话,递归结束。
    16             //是文件的时候需要拷贝
    17             //...一边读一边写
    18             FileInputStream in=null;
    19             FileOutputStream out=null;
    20             try {
    21                 //读这个文件
    22                 in=new FileInputStream(srcFile);
    23                 //写到这个文件中
    24                 String path=(destFile.getAbsolutePath().endsWith("\\")  ? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\\")+srcFile.getAbsolutePath().substring(3);
    25                 out=new FileOutputStream(path);
    26                 //一边读一边写
    27                 byte[] bytes=new byte[1024*1024];//一次复制1MB
    28                 int readCount=0;
    29                 while ((readCount=in.read(bytes))!=-1){
    30                     out.write(bytes,0,readCount);
    31                 }
    32 
    33             } catch (FileNotFoundException e) {
    34                 e.printStackTrace();
    35             } catch (IOException e) {
    36                 e.printStackTrace();
    37             } finally {
    38                 if (out!=null){
    39                     try {
    40                         out.close();
    41                     } catch (IOException e) {
    42                         e.printStackTrace();
    43                     }
    44                     if (in !=null){
    45                         try {
    46                             in.close();
    47                         } catch (IOException e) {
    48                             e.printStackTrace();
    49                         }
    50                     }
    51                 }
    52 
    53             }
    54             return;
    55         }
    56         //获取源下面的子目录
    57         File[] files = srcFile.listFiles();
    58         for(File file : files){
    59             // 获取所有文件的(包括目录和文件)绝对路径
    60             //System.out.println(file.getAbsolutePath());
    61             if(file.isDirectory()){
    62                 //新建对应的目录
    63                 //System.out.println(file.getAbsolutePath());
    64                 String srcDir=file.getAbsolutePath();//获取源目录
    65                 //System.out.println(srcDir.substring(3));
    66                 String destDir=(destFile.getAbsolutePath().endsWith("\\")  ? destFile.getAbsolutePath() : destFile.getAbsolutePath()+"\\")+srcDir.substring(3);
    67                 //System.out.println(destDir);
    68                 File newFile=new File(destDir);
    69                 if(!newFile.exists()){
    70                     newFile.mkdirs();
    71                 }
    72             }
    73             //递归调用
    74             copyDir(file, destFile);
    75         }
    76     }
    77 }

     

    下一篇:没有了