Java IO流之 File类

File类

文件和目录路径名的抽象表示形式。

File类可以干些什么呢?

  1. 可以操作文件
  2. 可以操作文件夹
  3. 可以操作文件的路径

常用方法 和 构造方法 代码解析:

public class Demo01 {
    public static void main(String[] args) throws IOException {
//      fun1();
//      fun2();
//      fun3();
//      fun4();
//      fun5();
//      fun6();
//      fun7();
        // 遍历打印Test所有文件和文件夹
        File file = new File("/Users/james/Desktop/Test");
        printDiv(file);

    }

    public static void printDiv(File file) {
        File[] listFiles = file.listFiles();
        for (File file2 : listFiles) {
            if (file2.isFile()) {
                System.out.println(file2.getName());
            }else {
                printDiv(file2);
            }
        }
    }

    /**
     * 
     */
    public static void fun7() {
        File file = new File("/Users/james/Desktop/Test");
        String[] list = file.list();
        // 路径下的所有文件及文件夹的名字(一层 以字符串形式)
        for (String string : list) {
            System.out.println(string);
        }   
        System.out.println("----------------------------");
        File[] listFiles = file.listFiles();
        // 获取的是该文件下 文件的全路径 以文件对象形式

        for (File file2 : listFiles) {
            System.out.println(file2);
        }
    }

    /**
     * 
     */
    public static void fun6() {
        // 和toString 方法一样 输出路径 不管文件存在与否
        File file = new File("/Users/james/Desktop/Test");
        String path = file.getPath();
        System.out.println(path);
        // 获取文件名字
        String name = file.getName();
        System.out.println(name);
        // 获取文件大小(获取文件占多少字节)
        // 英文 一个字节 中午 三个字节
        long length = file.length();
        System.out.println(length);
        // 获取父级路径
        File parentFile = file.getParentFile();
        System.out.println(parentFile);
    }

    /**
     * 
     */
    public static void fun5() {
        // 判断文件是否存在
        File file = new File("/Users/james/Desktop/Test/f");
        boolean directory = file.isDirectory();
        boolean file2 = file.isFile();
        System.out.println(directory);
        System.out.println(file2);
    }

    /**
     * 
     */
    public static void fun4() {
        // 删除
        // 删除需谨慎 不走回收站
        File file = new File("/Users/james/Desktop/Test/g");
        boolean delete = file.delete();
        // 如果文件夹下没有子文件夹 才可以删除
        System.out.println(delete);
    }

    /**
     * @throws IOException
     */
    public static void fun3() throws IOException {
        // 创建文件方法
        // 该方法只能创建文件 不给后缀也是创建的文件
        File file = new File("/Users/james/Desktop/Test/HelloWord.txt");
        boolean createNewFile = file.createNewFile();
        // 文件已经存在不会在创建 
        System.out.println(createNewFile);
        File file1 = new File("src/dp.txt");
         boolean createNewFile2 = file1.createNewFile();
         System.out.println(createNewFile2);
         // 创建文件夹 
         // 带不动后缀创建出来的都是文件夹
         // mkdir()只能创建一级的文件夹 mkdirs() 可以创建多级的
         File file2 = new File("/Users/james/Desktop/Test/g");
         boolean mkdir = file2.mkdirs();
         System.out.println(mkdir);
    }

    /**
     * 
     */
    public static void fun2() {
        // 构造方法
        /*
         * 绝对路径
         * 硬盘上的路径 并且 这个路径是唯一的
         * 相对路径
         * 相对路径是有参照物的 
         * 
         */
        File file = new File("/Users/james/Desktop/Test");
        System.out.println(file.getAbsolutePath());
        // 判断改路径是否存在
        boolean exists = file.exists();
        System.out.println(exists);

        // 使用相对路径 参照物 当前工程跟目录
        File file1 = new File("src/wl.txt");
        boolean exists1 = file.exists();
        System.out.println(exists1);
        System.out.println(file1.getAbsolutePath());

        String parent = "/Users/james/Desktop";
        String child ="Test";
        // 使用构造方法二 
        File file2 = new File(parent, child);
        boolean exists2 = file.exists();
        System.out.println(exists2);

        // 使用构造方法三
        File F = new File(parent);
        File file3 = new File(F, child);
        boolean exists3 = file.exists();
        System.out.println(exists3);
    }

    /**
     * 
     */
    public static void fun1() {
        // File 类的静态成员变量
        // 不同平台下获取的路径分隔符不同
        // MAC 系统下 路径分隔符:(冒号)
        // win下 是分号
        String pathseparator = File.pathSeparator;
        System.out.println(pathseparator);
        // 分隔符
        // MAC系统  /
        // win系统 \
        String separator = File.separator;
        System.out.println(separator);
    }
}

例题练习:

//2.从控制台输入一个字符串 该字符串是文件夹路径 计算这个文件夹的大小
//3.从控制台输入一个字符串 该字符串是文件夹路径 删除这个文件夹
public class Demo01 {
    public static void main(String[] args) {
        //File dirFile = getDirFile();
        //deletDir(dirFile);
    }

    // 输入路径判断是否是文件夹路径 是就返回 不是就重新输入
    public static File getDirFile() {       
        Scanner scanner = new Scanner(System.in);
        // 判断
        while (true) {
            System.out.println("请输入一个文件夹的路径");
            String path = scanner.nextLine();
            // 利用传进了的路径创建文件对象来判断
            File file = new File(path);
            if (!file.exists()) {
                System.out.println("输入路径不存在,请重新输入");
            }else if (file.isFile()) {
                System.out.println("你输入的是文件,请重新输入");
            }else {
                return file;
            }

        }
    }
    // 计算文件夹大小
    public static long getDirLengthByFile(File file) {
        long sum = 0;
        // 遍历文件夹
        File[] listFiles = file.listFiles();
        for (File subFile : listFiles) {
            // 是文件就直接计算 不是文件就继续遍历
            if (subFile.isFile()) {
                sum += subFile.length();
            }else {
                sum += getDirLengthByFile(subFile);
            }
        }
        return sum;
    }
    // 根据文件夹路径删除文件夹
    public static void deletDir(File file) {
        File[] listFiles = file.listFiles();
        for (File subFile : listFiles) {
            if (subFile.isFile()) {
                subFile.delete();
            }else {
                // 是文件夹 继续遍历
                deletDir(subFile);
            }
        }
        // 传入文件夹里面的文件及文件夹 在上面全部删除了 这时传进来的文件夹已经空了
        // 可以直接删除
        file.delete();
    }
}
// 通过过滤器 遍历文件夹 打印出小于200K的文件
public class Demo04 {
    public static void getTxTFiled(File file){
        File[] listFiles = file.listFiles(new MyFileNameFilter());
        for (File file2 : listFiles) {
            if (file2.isFile()) {
                System.out.println(file2.getName());
            }else {
                getTxTFiled(file2);
            }
        }
    }

    public static void main(String[] args) {
        File file = new File("/Users/james/Desktop/个人文件");
        // 使用重载listFile 方法
        getTxTFiled(file);
    }
}

class MyFileNameFilter implements FilenameFilter{

    //通过FilenameFilter过滤器获取指定目录中小于200K的小文件
    @Override
    public boolean accept(File dir, String name) {
        // 参数1. 是传进了的文件夹跟路径 
        // 参数2. 该路径下的文件名字和文件夹的名字
        // 利用这两个参数创建一个文件对象
        File file = new File(dir, name);
        // 过滤隐藏文件
        if (file.isHidden()) {
            return false;
        }
        if (file.isDirectory()) {
            return true;
        }
        return file.length() > 204800;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值