Java - File类

文章目录

  • 第一章 File类的概述
  • 第二章 File类的方法
    • 2.1 File类的构造方法
    • 2.2 File类的静态成员变量
    • 2.3 File类的获取方法
    • 2.4 File类的判断方法
    • 2.5 File类的创建删除方法
    • 2.6 File类的遍历方法
  • 第三章 文件显示、统计、复制、删除、剪切 练习
    • 3.1 显示文件及文件夹内容
    • 3.2 统计文件夹大小
    • 3.3 复制文件夹
    • 3.4 剪切文件夹
    • 3.5 删除文件夹
    • 3.6 复制指定类型文件
  • 第四章 参考资料

第一章 File类的概述

java.io.File: 用来描述计算机中 文件/文件夹 的路径。

第二章 File类的方法

2.1 File类的构造方法

File(String pathname)			  //根据形参创建File对象,所表示的文件或文件夹可以存在,也可以不存在
File(String parent, String child)
File(File parent, String child)

2.2 File类的静态成员变量

public static String pathSeparator: 	系统中多个路径的分隔符  				//windows ;
public static String separator: 		系统中一个路径中多个名称之间的分隔符号 //windows \

2.3 File类的获取方法

public String getAbsolutePath() 	返回此File的绝对路径名字符串。
public String getPath() 			返回构造方法中的字符串路径
public String getName() 			返回此File表示的文件或文件夹的名称。
public long length() 				返回由此File表示的文件的长度。
public File getParent()			    返回此File的父目录
public File getParentFile() 	    返回此File的父目录File对象
public long getFreeSpace()     		返回该分区上 空闲空间 long 字节
public long getUsableSpace()	    返回该分区上 空闲空间 long 字节 ,会检查写等权限,更准确
public long getTotalSpace()			返回该分区上的总空间
package com.alibaba.file_test;
import java.io.File;
import java.io.IOException;
public class Test {
    public static void main(String[] args) throws IOException {

        File file = new File("D:\\Project\\JavaAdvenced\\day12_review\\src\\com\\alibaba\\file_test\\a.txt");

        //系统分隔符
        System.out.println(File.separator);         // \
        System.out.println(File.pathSeparator);     // ;

        System.out.println(file.getAbsolutePath()); //D:\Project\JavaAdvenced\day12_review\src\com\alibaba\file_test\a.txt

        System.out.println(file.getName());         //a.txt

        System.out.println(new File("abc").getPath());//abc

        System.out.println(file.getParent());       //D:\Project\JavaAdvenced\day12_review\src\com\alibaba\file_test

        File parentFile = file.getParentFile();

        System.out.println(file.getCanonicalPath());//路径标准格式 D:\Project\JavaAdvenced\day12_review\src\com\alibaba\file_test\a.txt

        file = new File("d:");
        System.out.println(file.getFreeSpace());    //该分区上 空闲空间 long 字节
        System.out.println(file.getUsableSpace());  //该分区上 空闲空间 long 字节 ,会检查写等权限,更准确
        System.out.println(file.getTotalSpace());   //该分区上的 总空间
    }
}

2.4 File类的判断方法

public boolean exists()public boolean isDirectory() :此File表示的是否为目录。
public boolean isFile() :此File表示的是否为文件。
package com.alibaba.file_test;
import java.io.File;
public class EstimateMethodTest {
    public static void main(String[] args) {
        File file = new File("");

        boolean exists = file.exists();         //判断此抽象路径表示的文件/文件夹是否存在
        boolean directory = file.isDirectory(); //判断此抽象路径表示的 是文件夹吗 不存在也是false
        boolean file1 = file.isFile();          //判断此抽象路径表示的 是文件吗 不存在也是false
    }
}

2.5 File类的创建删除方法

public boolean createNewFile()  该名称的文件不存在时,才会创建一个新的空文件。
public boolean mkdir() :		创建由此File表示的目录。
public boolean mkdirs() :		创建由此File表示的目录,创建多级文件夹
public boolean delete() :		只能删除掉文件和空文件夹,java中删除动作不走回收站。

2.6 File类的遍历方法

public String[] list() 		获取当前目录下的所有的目录和文件的字符串数组
public File[] listFiles() 	获取当前目录下的所有的目录和文件的File对象数组    

第三章 文件显示、统计、复制、删除、剪切 练习

3.1 显示文件及文件夹内容

Java - File类_第1张图片

public static void showDir(File srcDir,int count) {
    System.out.println("|-" + srcDir.getName());
    File[] files = srcDir.listFiles();
    count++;
    for (File file : files) {
        System.out.print(printTab(count));
        if (file.isFile()) {
            System.out.println("|-" + file.getName());
        } else {
            showDir(file,count);
        }
    }
}	

3.2 统计文件夹大小

Java - File类_第2张图片

public static long calculateDirSize(File srcDir) {
    long size = 0;
    File[] files = srcDir.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            size += calculateDirSize(file);
        } else {
            size += file.length();
        }
    }
    return size;
}

3.3 复制文件夹

Java - File类_第3张图片

	//使用 commons-io-2.11.0包的工具类,工具类忒好了
    public static void copyDirUtil(File srcDir, File desDir) throws IOException {
        FileUtils.copyDirectory(srcDir, desDir); //底层也用的递归
    }
	
	//自己递归实现
    public static void copyDir(File srcDir, File desDir) throws IOException {
        if (!desDir.exists()) {
            desDir.mkdir();
        }
        File newDir = new File(desDir, srcDir.getName());
        newDir.mkdir();

        File[] files = srcDir.listFiles();
        if (files == null || files.length == 0) {
            return;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                copyDir(file, newDir);
            } else {
                FileInputStream fis = new FileInputStream(file);
                FileOutputStream fos = new FileOutputStream(new File(newDir, file.getName()));
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = fis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                }
                fis.close();
                fos.close();
            }
        }
    }

3.4 剪切文件夹

Java - File类_第4张图片

	//使用 commons-io-2.11.0包的工具类,工具类忒好了
    public static void cutDirUtil(File srcDir, File desDir) throws IOException {
        FileUtils.moveDirectory(srcDir,desDir);
        /*源码
			先复制,再删除
		*/
    }
    //自己实现,在复制后紧接着删除源文件
    public static void cutDir(File srcDir, File desDir) throws IOException {
        if (!desDir.exists()) {
            desDir.mkdir();//删除源文件夹
        }
        File newDir = new File(desDir, srcDir.getName());
        newDir.mkdir();

        File[] files = srcDir.listFiles();
        if (files == null || files.length == 0) {
            srcDir.delete();
            return;
        }
       for (File file : files) {
            if (file.isDirectory()) {
                cutDir(file, newDir);
            } else {
                FileInputStream fis = new FileInputStream(file);
                FileOutputStream fos = new FileOutputStream(new File(newDir, file.getName()));
                byte[] buffer = new byte[1024];
                int len = 0;
                while ((len = fis.read(buffer)) != -1) {
                    fos.write(buffer, 0, len);
                }
                fis.close();
                fos.close();
                //读写完后,删除源文件
                file.delete();
            }
        }
        srcDir.delete();
    }

3.5 删除文件夹

Java - File类_第5张图片

public static boolean deleteDir(File srcDir) {
    File[] files = srcDir.listFiles();
    if (files == null || files.length == 0) {
        return srcDir.delete();
    }

    for (File file : files) {
        if (file.isDirectory()) {
            deleteDir(file);
        } else {
            file.delete();
        }
    }
    return srcDir.delete();
}

3.6 复制指定类型文件

Java - File类_第6张图片

	//将符合条件的 文件路径-文件名 存到map集合中
    public static Map<File, String> serchTypeFile(File srcDir, String desFileSuffix) {
        Map<File, String> map = new HashMap<>();
        File[] files = srcDir.listFiles();
        if (files == null) {
            return map;
        }
        for (File file : files) {
            if (file.isDirectory()) {
                map.putAll(serchTypeFile(file, desFileSuffix));
            } else {
                if (file.getName().toLowerCase().endsWith(desFileSuffix)) {
                    map.put(file.getAbsoluteFile(), file.getName());
                }
            }
        }
        return map;
    }

    public static void copyTypeDir(File srcDir, File desDir, String desFileSuffix) throws IOException {
        Map<File, String> map = serchTypeFile(srcDir, desFileSuffix);
        Set<Map.Entry<File, String>> entries = map.entrySet();
        for (Map.Entry<File, String> entry : entries) {
            File key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "---" + value);
            /*挑选代码
                ...
            */
            //给文件加上时间戳,防止文件重名. 
            //这里有点问题,时间戳到毫秒值,如果电脑够快,可能两个同名文件加的时间戳一样,会造成文件的覆盖,唉~~ 
            //用(1)(2)的话,可以解决,但每次都要遍历新文件夹,好麻烦啊。
            String[] names = key.getName().split("\\."); //正则表达式的关系
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS");
            String format = sdf.format(new Date());
            String s = names[0] + "(" + format + ")." + names[1];

            File file = new File(desDir, s);
            FileUtils.copyFile(key,file);

        }
    }

第四章 参考资料

B站黑马视频

你可能感兴趣的:(JAVA,java)