JavaFile类和递归
2018-07-09 17:14
375 查看
八、File类和递归
8.1 概述
java.io.File 类时文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和产出等操作。
8.2 构造方法
-
public File(String pathname) :通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
-
public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。 -
public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。// 文件路径名 String pathname = "D:\\aaa.txt"; File file1 = new File(pathname); // 文件路径名 String pathname2 = "D:\\aaa\\bbb.txt"; File file2 = new File(pathname2); // 通过父路径和子路径字符串 String parent = "d:\\aaa"; String child = "bbb.txt"; File file3 = new File(parent, child); // 通过父级File对象和子路径字符串 File parentDir = new File("d:\\aaa"); String child = "bbb.txt"; File file4 = new File(parentDir, child);
17 1// 文件路径名
2String pathname = "D:\\aaa.txt";
3File file1 = new File(pathname);
4 5// 文件路径名
6String pathname2 = "D:\\aaa\\bbb.txt";
7File file2 = new File(pathname2);
8 9// 通过父路径和子路径字符串
10String parent = "d:\\aaa";
11String child = "bbb.txt";
12File file3 = new File(parent, child);
13 14// 通过父级File对象和子路径字符串
15File parentDir = new File("d:\\aaa");
16String child = "bbb.txt";
17File file4 = new File(parentDir, child);
Tips:
1.一个File对象 代表硬盘中实际存在的一个文件或目录
2.无论该路径下是否存在文件或者目录,都不影响File对象的创建
8.3 获取功能 的方法
- public String getAbsolutePath() ` :返回此File的绝对路径名字符串。
-
public String getPath()
:将此File转换为路径名字符串。 -
public String getName()
:返回由此File表示的文件或目录的名称。 -
public long length()
:返回由此File表示的文件的长度。 -
tips:
-
length() 表示文件的长度 但是 目录的长度未指定
8.4 判断功能的方法
-
public boolean exists()` :此File表示的文件或目录是否实际存在。
-
public boolean isDirectory()
:此File表示的是否为目录。 -
public boolean isFile()
:此File表示的是否为文件。
notes: 创建的文件对象 必须是真实存在的 才能判断成功,如果此File表示目录,则目录必须为空才能删除。
8.5创建删除功能的方法
-
public boolean createNewFile()
` :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。 -
public boolean delete()
:删除由此File表示的文件或目录。 notes:当目录为空才能删除, -
public boolean mkdir()
:创建由此File表示的目录。 -
public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。
-
public String[] list()
:返回一个String数组,表示该File目录中的所有子文件或目录。
-
public File[] listFiles()
:返回一个File数组,表示该File目录中的所有的子文件或目录。 -
tips:
-
调用listFile 方法的File对象 表示 的必须是实际存在的目录,否则会返回null,无法进行遍历
9、递归
9.1 概述
自己调用自己的现象。 递归思想顺序9.2 举例子介绍:
public class DiGuiDemo { public static void main(String[] args) { //计算1~num的和,使用递归完成 int num = 5; // 调用求和的方法 int sum = getSum(num); // 输出结果 System.out.println(sum); } /* 通过递归算法实现. 参数列表:int 返回值类型: int */ public static int getSum(int num) { /* num为1时,方法返回1, 相当于是方法的出口,num总有是1的情况 */ if(num == 1){ return 1; } /* num不为1时,方法返回 num +(num-1)的累和 递归调用getSum方法 */ return num + getSum(num-1); } }30 1
public class DiGuiDemo {2
public static void main(String[] args) {3
//计算1~num的和,使用递归完成4
int num = 5;5
// 调用求和的方法6
int sum = getSum(num);7
// 输出结果8
System.out.println(sum);9 10
}11
/*12
通过递归算法实现.13
参数列表:int14
返回值类型: int15
*/16
public static int getSum(int num) {17
/*18
num为1时,方法返回1,19
相当于是方法的出口,num总有是1的情况20
*/21
if(num == 1){22
return 1;23
}24
/*25
num不为1时,方法返回 num +(num-1)的累和26
递归调用getSum方法27
*/28
return num + getSum(num-1);29
}30
}tips: 递归调用保证:1.能够停止下来,有次数限制,否则会发生栈内存溢出
public class DiGuiDemo2 { public static void main(String[] args) { // 创建File对象 File dir = new File("D:\\aaa"); // 调用打印目录方法 printDir(dir); } public static void printDir(File dir) { // 获取子文件和目录 File[] files = dir.listFiles(); // 循环打印 /* 判断: 当是文件时,打印绝对路径. 当是目录时,继续调用打印目录的方法,形成递归调用. */ for (File file : files) { // 判断 if (file.isFile()) { // 是文件,输出文件绝对路径 System.out.println("文件名:"+ file.getAbsolutePath()); } else { // 是目录,输出目录绝对路径 System.out.println("目录:"+file.getAbsolutePath()); // 继续遍历,调用printDir,形成递归 printDir(file); } } } }x 1
public class DiGuiDemo2 {2
public static void main(String[] args) {3
// 创建File对象4
File dir = new File("D:\\aaa");5
// 调用打印目录方法6
printDir(dir);7
}8 9
public static void printDir(File dir) {10
// 获取子文件和目录11
File[] files = dir.listFiles();12
// 循环打印13
/*14
判断:15
当是文件时,打印绝对路径.16
当是目录时,继续调用打印目录的方法,形成递归调用.17
*/18
for (File file : files) {19
// 判断20
if (file.isFile()) {21
// 是文件,输出文件绝对路径22
System.out.println("文件名:"+ file.getAbsolutePath());23
} else {24
// 是目录,输出目录绝对路径25
System.out.println("目录:"+file.getAbsolutePath());26
// 继续遍历,调用printDir,形成递归27
printDir(file);28
}29
}30
}31
}
9.3 文件过滤器优化
java.io.FileFilter 是一个接口,是File的过滤器。该接口的对象可以传递给File类的listFiles(FileFilter) 作为参数,接口中只有一个方法, boolean accept(File pathname): 测试pathanme 是否应该包含当前File目录中,符合则返回true 简单介绍: 1.接口作为参数,需要传递子类对象,重写其中方法。我们选择匿名内部类方式,比较简单。 2.accept 方法,参数为File,表示当前 File 下所有的子类文件和子目录。保留住 则返回true,过滤掉则返回false。保留规则: ①要么是 . java文件 ② 要么是目录 ,用于继续遍历。 3.通过过滤器的作用,listFiles(FileFilter)返回的数组元素中,子文件对象都是符合条件的,可以直接打印 代码实现部分:public class DiGuiDemo4 { public static void main(String[] args) { File dir = new File("D:\\aaa"); printDir2(dir); } public static void printDir2(File dir) { // 匿名内部类方式,创建过滤器子类对象 File[] files = dir.listFiles(new FileFilter() { @Override public boolean accept(File pathname) { return pathname.getName().endsWith(".java")||pathname.isDirectory(); } }); // 循环打印 for (File file : files) { if (file.isFile()) { System.out.println("文件名:" + file.getAbsolutePath()); } else { printDir2(file); } } } }24 1
public class DiGuiDemo4 {2
public static void main(String[] args) {3
File dir = new File("D:\\aaa");4
printDir2(dir);5
}6
7
public static void printDir2(File dir) {8
// 匿名内部类方式,创建过滤器子类对象9
File[] files = dir.listFiles(new FileFilter() {10
@Override11
public boolean accept(File pathname) {12
return pathname.getName().endsWith(".java")||pathname.isDirectory();13
}14
});15
// 循环打印16
for (File file : files) {17
if (file.isFile()) {18
System.out.println("文件名:" + file.getAbsolutePath());19
} else {20
printDir2(file);21
}22
}23
}24
}Lambda优化
public static void printDir3(File dir) { // lambda的改写 File[] files = dir.listFiles(f ->{ return f.getName().endsWith(".java") || f.isDirectory(); }); // 循环打印 for (File file : files) { if (file.isFile()) { System.out.println("文件名:" + file.getAbsolutePath()); } else { printDir3(file); } } }1
public static void printDir3(File dir) {2
// lambda的改写3
File[] files = dir.listFiles(f ->{4
return f.getName().endsWith(".java") || f.isDirectory();5
});6 7
// 循环打印8
for (File file : files) {9
if (file.isFile()) {10
System.out.println("文件名:" + file.getAbsolutePath());11
} else {12
printDir3(file);13
}14
}15
}
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
相关文章推荐
- 使用java的File类遍历文件夹,打印树状结构(递归实现)
- Java_IO流_File类配合使用(其中用到了递归)
- 黑马程序员---Java基础---异常、File类和递归
- Test_Java_File类递归练习(按层级打印)
- 黑马程序员————java基础--------IO输入输出之异常、File类和递归
- Java中如何利用File类递归的遍历指定目录中的所有文件和文件夹
- File类递归练习+JAVA学习笔记-DAY23
- 黑马程序员—【Java基础篇】之IO流(二)———File类、递归、IO其它流和编码表
- Java基础第十六天--File类及递归
- java笔记25 File类、递归、Properties
- 黑马程序员_Java(异常类,file类,递归,字节流)
- 黑马程序员——高新技术---Java基础-IO流_File类,递归思想
- 黑马程序员___16java基础 File类 递归 打印流
- 黑马程序员java学习—File类,Properties类和递归思想
- Java_File类和递归
- 黑马程序员——Java中File类笔记,涉及递归思想、过滤器
- Test_Java_File类递归练习(统计该文件夹大小)
- Java使用分治递归的思想实现快速排序
- java 文件、文件夹 递归复制、移动
- java中方法的定义和重载、简单递归