Java - File类

第一章 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 显示文件及文件夹内容

在这里插入图片描述

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 统计文件夹大小

在这里插入图片描述

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 复制文件夹

在这里插入图片描述

	//使用 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 剪切文件夹

在这里插入图片描述

	//使用 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 删除文件夹

在这里插入图片描述

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 复制指定类型文件

在这里插入图片描述

	//将符合条件的 文件路径-文件名 存到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站黑马视频

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值