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);
    }
    } } }

Java之File与递归的更多相关文章

  1. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  2. Java——使用File类递归遍历指定路劲下的所有文件

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  3. java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数

    File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...

  4. Java【File类、递归】

    File 1.在io包中 操作电脑中的文件和文件夹 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 我们可以使用File类的方法     创建一 ...

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

    package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; public clas ...

  6. Java篇-File类之常用操作

    /** * */ package com.io.file; import java.io.File; import java.io.IOException; /** * <pre> * & ...

  7. 使用File类递归列出E盘下全部文件

    import java.io.File;public class FileListTest { public void tree(File file){ if(file.listFiles()!=nu ...

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

    Java File类   Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目 ...

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

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

随机推荐

  1. sqlmap 进阶 (一)

    0x1 命令 以此类推,可以具体自己研究有哪些参数,放在哪,有什么用,怎么用 参考:https://blog.csdn.net/bo_mask/article/details/76130848 0x2 ...

  2. 第24次Scrum会议(11/12)【欢迎来怼】

    一.小组信息 队名:欢迎来怼 小组成员 队长:田继平 成员:李圆圆,葛美义,王伟东,姜珊,邵朔,阚博文 小组照片 二.开会信息 时间:2017/11/12 17:05~17:32,总计27min. 地 ...

  3. Final发布文案+美工

    团队名称:探路者 1蔺依铭:http://www.cnblogs.com/linym762/(组长) 2张恩聚:http://www.cnblogs.com/zej87/ 3米赫:http://www ...

  4. Daily Srum 10.26

    Daily Scrum Meeting 虽然TFS的相关使用已经在上面贴出来一段时间,但是要运用TFS还是有些困难的,特别是TFS的代码管理机制,所以我们让部分人先弄清楚,然后再教授给其他人.终于大家 ...

  5. Alpha阶段产品功能说明

    先展示一下我们的功能流程图吧~ 一.学生用户 1. 学生登陆注册 BuaaClubs是北航所有在校生都可以注册登录的网站. 登陆界面是这样哒~ 2. 浏览报名活动 同学们可以在这个网站上查看所有社团发 ...

  6. 20172325 2017-2018-2 《Java程序设计》第五周学习总结

    20172325 2017-2018-2 <Java程序设计>第五周学习总结 教材学习内容总结 1.布尔表达式的值只有真或假,表达式的结果决定了下一步将要执行的语句. 2.循环语句可以用在 ...

  7. 冲刺One之站立会议3 /2015-5-16

    2015-5-16 今天我们主要完成一部分服务器端的内容,因为只有服务器端完成了主要功能其他的部分才可以测试有没有成功实现目标.具体包括服务器登陆时需要的端口号.启动时间.服务器状态的显示.在线人数等 ...

  8. Mevan(转)

    Missing artifact com.oracle:ojdbc6:jar:11.2.0.1.0问题解决 ojdbc包pom.xml出错 置顶 2017年08月23日 10:55:25 阅读数:96 ...

  9. 第五次作业+4505B寝室队

    1.需求分析: 作一个简单的MP3播放器,并能显示播放文件的路径. 2.设计思路: 用窗体设计播放器的界面,以市面上主流的播放器为标准,采用一个窗体的界面. 3.实现的功能: 第一是能播放MP3文件, ...

  10. linux下使用pip在虚拟环境下安装tensorflow-gpu

    1. 查看已安装包库 pip list 2. linux下下载虚拟环境 sudo apt-get install python-virtualenv 3.建立全新的virtualenv环境 virtu ...