Java学习笔记 -IO流3:File

1.基本概念

  • File类和四大家族没有关系,所以File类不能完成文件的读写
  • 一个File对象是目录名或者文件的抽象表示形式
示例程序
public class FileTest01 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\file");

        //判断是否存在
        System.out.println(file.exists());

        if(!file.exists()) {
            //以文件的形式新建
            file.createNewFile();
        }

        if(!file.exists()){
            //以目录的形式新建
            file.mkdir();
        }

        if(!file.exists()){
            File f2 = new File("D:/a/b/c");
            //以多重目录创建
            f2.mkdirs();
        }
    }
}

2.常用方法

public class FileTest02 {
    public static void main(String[] args) {

        File f1 = new File("D:\迅雷下载");

        //获取绝对路径名
        System.out.println(f1.getAbsoluteFile());
        //获取文件名
        System.out.println("文件名:" + f1.getName());

        //判断是否是一个目录
        System.out.println(f1.isDirectory());

        //判断是否是一个文件
        System.out.println(f1.isFile());

        //获取文件最后一次修改的时间
        long haoMiao = f1.lastModified();  //从1970开始的总毫秒数
        Date time = new Date(haoMiao);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd:mm:ss SSS");
        String strTime = sdf.format(time);
        System.out.println(strTime);

        //获取文件的大小 (单位:字节)
        System.out.println(f1.length());
        
        //获取当前目录下所有子文件
        File[] files = f1.listFiles();
        for(File f : files){
            System.out.println(f.getName());
        }
    }
}

(重点)3.目录拷贝模板程序

  • 总结:""是因为转义的原因才有两个"",实际上在字符串中只有1个
  • (错误总结)文件拷贝编写程序的时候需要注意:不要将srcFile、desFile设置为一个目录,而是设置为目录文件名,落实到文件上才不会出错
public class FileCopy {

    public static void main(String[] args) {
        File srcFile = new File("D:\Aseprite");
        File desFile = new File("D:\迅雷下载");
        FileCopy.create(srcFile, desFile);
    }

    /**
     * 目录拷贝
     * @param srcFile 源目录
     * @param desFile 目标目录
     */
    public static void create(File srcFile, File desFile){
        //需要强调:"\"是因为转义的原因才有两个"",实际上在字符串中只有1个
        String desDtr = desFile.getAbsolutePath().endsWith("\") ? desFile.getAbsolutePath() :
                desFile.getAbsolutePath() + "\" + srcFile.getName();
        desFile = new File(desDtr);
        //如果是一个文件,则直接进行拷贝
        if(srcFile.isFile()){
            copy(srcFile,desFile);
        }
        //如果是一个目录,则首先将此目录创建出来,然后递归
        else if(srcFile.isDirectory()){
            desFile.mkdir();
            File[] files = srcFile.listFiles();
            for(File f : files){
                create(f, desFile);
            }
        }
    }

    /**
     * 文件拷贝
     * @param srcFile 源目录
     * @param desFile 目标目录
     */
    public static void copy(File srcFile , File desFile){
        System.out.println(srcFile.getName());
        System.out.println(desFile.getName());
        System.out.println();

        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(desFile);
            byte[] bytes = new byte[1024 * 1024];
            int retValue = 0;
            while((retValue = fis.read(bytes)) != -1){
                fos.write(bytes, 0, retValue);
            }
            fos.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
原文地址:https://www.cnblogs.com/zy200128/p/13021839.html