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);
}
} } }
Java之File与递归的更多相关文章
- java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量
package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...
- Java——使用File类递归遍历指定路劲下的所有文件
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数
File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...
- Java【File类、递归】
File 1.在io包中 操作电脑中的文件和文件夹 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 我们可以使用File类的方法 创建一 ...
- Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
package cuiyuee; import java.io.File; import java.util.ArrayList; import java.util.List; public clas ...
- Java篇-File类之常用操作
/** * */ package com.io.file; import java.io.File; import java.io.IOException; /** * <pre> * & ...
- 使用File类递归列出E盘下全部文件
import java.io.File;public class FileListTest { public void tree(File file){ if(file.listFiles()!=nu ...
- 黑马程序员-File类+递归的简单应用
Java File类 Java.io.File Java文件类以抽象的方式代表文件名和目录路径名.该类主要用于文件和目录的创建.文件的查找和文件的删除等. File对象代表磁盘中实际存在的文件和目 ...
- Java使用线程池递归压缩文件夹下面的所有子文件
本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import ...
随机推荐
- 高可用OpenStack(Queen版)集群-16.Nova集成Ceph
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- React Native 之 main.jsbundle生成方法
通过react-native init yooweiProject 生成的RN项目(版本基于0.57),目录结构如下 项目结构: 大家可以发现main.jsbundle 是红色的,不存在的,这个属于正 ...
- final发布--PSP Daily软件功能书(最终版)
一.开发背景 你在完成了一周的软件工程作业后,需要提交一个PSP图表,里面有4项,如下所示: 1.本周PSP表格,包含每项任务的开始.中断.结束.最终时间,格式如下: 2.本周进度条,包含从开始到现在 ...
- mybatis之模糊查询SQL
一,MySQL数据库 name like concat('%' , #{name} , '%') 二,Oracle数据库 name like '%' || #{name} || '%'
- Scrum Meeting 9 -2014.11.15
项目开发测试要进入尾声了.大家加把劲,这周末能整合完成就最好了. 服务器方面已经能运行我们的程序了.还需要研究如何与其他两小组整合. Member Today’s task Next task 林豪森 ...
- 在Windows下制作静态库和动态库
一:静态库的创建 VC++6.0中new一个的为win32 static library工程,之后有二个选项.根据需求选吧. 具体的类或者函数的添加过程和标准的工程一样,直接创建新的类或者添加新 的. ...
- delphi 图像处理 二值化
procedure TDR_QM_ZP_Form.Image_EZH( Bmp: TBitmap ); var p: PByteArray; Gray, x, y: Integer; begin // ...
- struts2 中怎样获取HttpServletReqest
struts2 中怎样获取HttpServletRequest 和HttpServletResponse 提供两种方法 第一种通过调用ServletActionContext这个类源代码中提供这个对象 ...
- Leetcode题库——33.搜索旋转排序数组
@author: ZZQ @software: PyCharm @file: search.py @time: 2018/11/12 18:12 要求:假设按照升序排序的数组在预先未知的某个点上进行了 ...
- Beta冲刺 (7/7)
队名:天机组 组员1友林 228(组长) 今日完成:封装代码 明天计划: 剩余任务:优化网络通讯机制 主要困难:暂无 收获及疑问:暂无 组员2方宜 225 今日完成:优化了一部分活动 明天计划:剩余活 ...