首页 > 其他 > 详细

File类常用方法及拷贝目录

时间:2021-02-08 16:47:30      阅读:16      评论:0      收藏:0      [点我收藏+]

File类是Object的一个子类,与四大家族流是没有关系的,所以File不能对文件进行读和写的操作。

File类是文件和目录路径名的抽象表示。即File对象对应的可能是一个文件,也可能是一个目录。

对于File类,查看api文档,可以看到有非常多的方法,需要掌握其中的一些常用方法。

File类常用方法

  • File(String pathname) :构造方法;
  • boolean exits():判断文件是否存在;
  • boolean createNewFile():创建一个新文件;
  • boolean mkdir():创建一个目录;
  • boolean mkdirs():创建多重目录;
  • boolean isFile():判断是否是文件;
  • boolean isDirectory():判断是否是目录;
  • String getParent():获取父路径;
  • File getParentFile():获取父文件;
  • String getAbsolutePath():获取绝对路径;
  • String getName():返回文件或者目录的名称;
  • long lastModified():获取最后一次修改时间;
  • long length():获取文件长度;
  • File[] listFile():获取当前目录下的所有子目录。

常用方法的使用:

package com.dh.io;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileDemo {

    public static void main(String[] args) {

        //通过构造方法创建一个File类对象
        File file1 = new File("F:\\file1");
        //首先先判断文件是否存在
        boolean b = file1.exists();
        //如果不存在
        if (!b) {
            //以文件的形式创建
            try {
                file1.createNewFile();
                System.out.println("file1文件创建成功!");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("file1文件已存在!");
        }

        File file2 = new File("F:\\file2");
        if (!file2.exists()) {
            //以目录的形式创建
            file2.mkdir();
            System.out.println("file2目录创建成功!");
        } else {
            System.out.println("file2目录已存在!");
        }

        File file3 = new File("F:\\file3\\test");
        if (!file3.exists()) {
            //或者以多重目录的形式创建
            file3.mkdirs();
            System.out.println("file3多重目录创建成功!");
        } else {
            System.out.println("file3多重目录已存在!");
        }

        //判断是否是一个目录
        System.out.println("file1是一个文件吗?" + file1.isFile());
        System.out.println("file1是一个目录吗?" + file1.isDirectory());
        //判断是否是一个文件
        System.out.println("file2是一个文件吗?" + file2.isFile());
        System.out.println("file2是一个目录吗?" + file2.isDirectory());

        //获取父路径(1)
        String parent = file1.getParent();
        System.out.println("file1的父路径:" + parent);
        //获取父路径(2)
        File parentFile = file1.getParentFile();
        System.out.println("file1的绝对路径:" + parentFile);
        //获取绝对路径
        String absolutePath = file1.getAbsolutePath();
        System.out.println(absolutePath);

        //获取文件最后一次修改时间
        long l = file1.lastModified();
        Date date = new Date(l);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String s = dateFormat.format(date);
        System.out.println("file1的最后一次修改时间:" + s);

        //获取文件的大小
        long length = file1.length();
        System.out.println("file1的长度:" + length);

        //获取所有的子目录名称
        File file4 = new File("F:\\file3");
        File[] files = file4.listFiles();
        for (File file : files) {
            System.out.println(file.getName());
        }
    }
}

结果:

file1文件创建成功!
file2目录创建成功!
file3多重目录创建成功!
file1是一个文件吗?true
file1是一个目录吗?false
file2是一个文件吗?false
file2是一个目录吗?true
file1的父路径:F:file1的绝对路径:F:F:\file1
file1的最后一次修改时间:2021-02-08 11:51:50
file1的长度:0
test

File类实现目录拷贝

四大家族是可以完成对文件的读写复制的,但是不能对目录进行复制操作,要对目录进行复制的话,就需要使用File类啦。

分析实现逻辑:

首先我们需要去递归判断(因为可能存在多重目录)要复制目录下的子目录和子文件,如果是目录就在目的目录下新建对应的目录,如果是文件的话,就停止递归,使用流操作完成对文件的复制。

实现代码:

package com.dh.io;

import java.io.*;

public class FileCopyDemo {

    public static void main(String[] args) {
        //拷贝源
        File fileSrc = new File("F:\\test");
        //拷贝目标
        File fileDes = new File("D:\\");
        //调用拷贝方法
        copyFiles(fileSrc,fileDes);
    }

    public static void copyFiles(File fileSrc,File fileDes){
        //如果是文件,则复制文件,然后退出
        FileInputStream fis = null;
        FileOutputStream fos = null;
        if(fileSrc.isFile()){
            try {
                fis = new FileInputStream(fileSrc);
                String path = (fileDes.getAbsolutePath().endsWith("\\") ?fileDes.getAbsolutePath() : fileDes.getAbsolutePath() + "\\") + fileSrc.getAbsolutePath().substring(3);
                fos = new FileOutputStream(path);
                byte[] bytes = new byte[1024*1024];
                int readCount = 0;
                while((readCount = fis.read(bytes))!=-1){
                    fos.write(bytes,0,readCount);
                }
                fos.flush();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(fos != null){
                    try {
                        fos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(fis != null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return;
        }
        //如果是目录,则获取该目录下的文件,遍历
        File[] files = fileSrc.listFiles();
        for (File file : files) {
            if(file.isDirectory()){
                //获取源路径
                String srcPath = file.getAbsolutePath();
                //利用拷贝目标和源路径拼接,获得对应的目录
                String desPath = (fileDes.getAbsolutePath().endsWith("\\") ?fileDes.getAbsolutePath() : fileDes.getAbsolutePath() + "\\") + srcPath.substring(3);
//            System.out.println(desPath);
                File newFile = new File(desPath);
                if(!(newFile.exists())){
                    newFile.mkdirs();
                }
            }
            //用遍历的当前元素继续递归
            copyFiles(file,fileDes);
        }
    }
}

这样就可以实现目录的拷贝啦!

File类常用方法及拷贝目录

原文:https://www.cnblogs.com/denghui-study/p/14388649.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!