Java之File与递归

File类的使用和递归思想

File类

概述

文件: 存储数据

文件夹: 管理文件与文件夹

构造方法

  • public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
  • public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例。
  • public File(File parent, String child) :从父抽象路径名和子路径名字符串创建新的 File实例。

常用方法

创建方法

  • public boolean createNewFile() : 创建文件,存在返回false,不存在创建文件返回true
  • boolean mkdir() : 创建文件夹,存在返回false,不存在创建文件夹返回true
  • boolean mkdirs() : 创建多级文件夹,存在返回false,不存在创建多级文件夹返回true

删除方法

  • boolean delete() : 删除文件或者文件夹,文件存在返回true,文件不存在返回false;

    可以删除空的文件夹,如果文件夹下有子文件或者子文件夹,删除不掉

判断方法

  • public boolean exists() :此File表示的文件或目录是否实际存在。
  • public boolean isDirectory() :此File表示的是否为目录(文件夹)。
  • public boolean isFile() :此File表示的是否为文件。

路径问题

绝对路径 : 以盘符开头

相对路径 : 相对于本项目

  • public String getAbsolutePath() :返回此File的绝对路径名字符串。
  • public String getParent() : 获取父路径,在创建对象时制定了父路径才能获取,没有指定返回null(相对路径返回null).
  • public String getPath() :将此File转换为路径名字符串(获取构建时的路径)。
  • public String getName() :返回由此File表示的文件或目录的名称。
  • public long length() :返回由此File表示的文件的长度。

高级方法

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录。
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录。

递归

概述

递归就是方法内部自己调用自己.

注意事项

  • 必须有出口,否则会出现栈内存溢出的错误.
  • 递归的次数不宜过多.否则容易出现栈内存溢出
  • 构造方法不能递归

理解

对于递归,可以使用栈来理解,入栈和出栈,对于整个程序的流程,首先,main方法入栈,接着递归方法入栈,方法内调用自己,

继续入栈,知道出口进行返回出栈,层层出栈,这个就是底层的原理吧.

计算n的阶乘

import java.util.Scanner;

/**
 * 求n阶乘
 *  1.手动输入计算的值
 *  2.创建递归方法进行计算
 * @author WZLOVE
 * @create 2018-07-20 14:34
 */
public class Demo1 {

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        System.out.println("请输入您要计算的值是:");
        int n = in.nextInt();
        in.close();

        long result = getRecursive(n);

        System.out.println("您输入的值的阶乘计算结果为:" + result);

    }

    public static long getRecursive(int n){

        // 定义出口
        if( n == 1 ){
            return 1;
        }

        return n * getRecursive( n - 1 );
    }
}

打印多级目录

package com.wzlove.recursive;

import java.io.File;

/**
 * 遍历多级目录
 *
 * @author WZLOVE
 * @create 2018-07-20 15:11
 */
public class Demo2 {

    public static void main(String[] args) {

        // 程序的健壮性测试
        // File file = null;
       // File file = new File("E:\\");
       // 测试路径
        File file = new File("G:\\工作区间\\Intellij IDEA\\JavaSE");
        printDirsAndFiles(file);
    }

    public static void printDirsAndFiles(File file){

        // 程序的健壮性
        if(file == null || !file.exists()){
            return ;
        }

        // 如果是文件,直接输出
        if(file.isFile()){
            System.out.println(file.getAbsolutePath());
        }

        // 如果是文件夹,进行遍历递
        File[] files = file.listFiles();
        // 如果没有访问权限,直接返回
        if(files == null){
            return ;
        }
        for (File file1 : files) {

            if(file1.isFile()){

                System.out.println(file1.getAbsolutePath());

            } else {

                System.out.println(file1.getAbsolutePath());

                printDirsAndFiles(file1);

            }

        }
    }
}

打印某个目录下的所有.java文件

两种方法,第一种:

package com.wzlove.recursive;

import java.io.File;

/**
 * 搜索G:\工作区间\Intellij IDEA\JavaSE 目录中的.java 文件。
 *  1.创建File的对象,传递File的虚拟路径
 *  2.递归方法
 *  3.进行健壮性判断:
 *      * null的判断
 *      * 文件不存在
 *      * 如果路径是文件,这三种情况都是直接返回
 *      * 如果路径合法
 *          (1) 判断有无权限,有继续向下,无直接返回
 *          (2) 返回该文件夹下的所有文件和文件夹
 *          (3) 增强for循环进行遍历
 *              如果是文件,判断是否满足要求(递归的出口)
 *              如果是文件夹,进行递归调用
 *
 * @author WZLOVE
 * @create 2018-07-20 16:27
 */
public class Demo3 {

    public static void main(String[] args) {
        File file = new File("G:\\工作区间\\Intellij IDEA\\JavaSE");
        printAllJavaFiles(file);
    }

    public static void printAllJavaFiles(File file){
        if(file == null || !file.exists() || file.isFile()){
            return ;
        }

        File[] files = file.listFiles();
        if(files == null){
            return ;
        }
        for (File file1 : files) {
            if(file1.isFile()){
                if(file1.getName().endsWith(".java")){
                    System.out.println(file1.getAbsolutePath());
                }
            }else{
                printAllJavaFiles(file1);
            }
        }
    }

}

第二种,要使用到文件过滤器:

  • File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

      package com.wzlove.recursive;
    
      import java.io.File;
      import java.io.FileFilter;
    
      /**
       *
       * @author WZLOVE
       * @create 2018-07-20 16:27
       */
      public class Demo4 {
    
          public static void main(String[] args) {
              File file = new File("G:\\工作区间\\Intellij IDEA\\传智播客\\JavaSE");
              printAllJavaFiles(file);
          }
    
          public static void printAllJavaFiles(File file){
              if(file == null || !file.exists() || file.isFile()){
                  return ;
              }
    
              // 使用listFiles(FileFilter)
              /**
               * File[] listFiles(FileFilter filter)
               * 返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。
               */
              File[] files = file.listFiles(new FileFilter() {
                  @Override
                  public boolean accept(File pathname) {
                      if(pathname.isFile() && pathname.getName().endsWith(".java")){
                          // 是以.java文件结尾的文件
                          return true;
                      }
                      // 如果是文件夹,也进行返回
                      if(pathname.isDirectory()){
                          return true;
                      }
                      // 其余情况返回false
                      return false;
                  }
              });
    
              for (File file1 : files) {
                  if(file1.isFile()){
                      System.out.println(file1.getAbsolutePath());
                  }else{
                      printAllJavaFiles(file1);
                  }
              }
    
          }
    
      }

原文地址:https://www.cnblogs.com/wadmwz/p/9342863.html

时间: 2024-10-16 18:58:10

Java之File与递归的相关文章

Java之File类及递归树形展示目录_20150804

Java之File类及递归树形展示目录 20150804 下面的构造函数可以用来生成File 对象: File(String directoryPath)          File(String directoryPath, String filename)          File(File dirObj, String filename) 这里,directoryPath是文件的路径名,filename 是文件名,dirObj 一个指定目录的File 对象.下面的例子创建了三个文件:f1

Java基础-File类篇、递归篇

1. File类 1.1 File类介绍 ? java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 语法 public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例. public File(String parent, String child) :从父路径名字符串和子路径名字符串创建新的 File实例. public File(File parent, Str

Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹

package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; public class GetAllDirectory { public static void showDirectory(File file){ File[] files = file.listFiles(); for(File a:files){ System.out.println(a.getAbsoluteP

JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件

package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要显示文件目录的层级 * 注:运用了递归的算法. */ public class FileDemo3 { public static void main(String[] args) { File dir=new File("F:\\黑马学习日程\\"); //File dir=new Fi

[javaSE] IO流(FIle对象递归文件列表)

获取File对象,new出来,构造参数:String目录名 调用File对象的list()方法,获取String[]数组文件名称 循环数组,列出所有文件包含隐藏文件 递归列出所有的数据 定义一个静态方法showDir(),传递进参数:FIle对象 调用File对象的listFiles()方法,得到File[]数组 循环File[]数组,每个元素是File对象 循环中,调用File对象的isDirectory()方法,判断是否是一个目录,如果是目录,再次调用showDir()方法,参数:File对

黑马程序员-File类+递归的简单应用

Java File类   Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目录.通过以下构造方法创建一个File对象. 通过给定的父抽象路径名和子路径名字符串创建一个新的File实例. File(File parent, String child); 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例. File(String pathname) 根据 pa

IO流(一):File和递归

一.File (一)概述 1.File: 1)文件和目录(文件夹)路径名的抽象表示形式 2)注意: 可以表示文件夹与文件,即路径与文件 抽象概念,即路径与文件是否存在不确定 2.构造方法 1)File(String pathname):根据一个路径得到File对象 File file = new File("E:\\demo\\a.txt"); 2)File(String parent, String child):根据一个目录和一个子文件/目录得到File对象 File file2

黑马程序员------Java中File类学习总结

Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! File类 1.用来将文件或者文件夹封装成对象,以方便对文件和文件夹进行操作. 2.File对象可以作为参数传递给流的构造函数. File对象功能: 创建和删除: 1.boolean createNewFile(): 当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件. 2.boolean mkdir():创建此抽象路径名指定的目录. 3.boolean mkdirs():创建此抽象路径

Java使用线程池递归压缩文件夹下面的所有子文件

本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream