1)java.io.File
这个类可以表示磁盘上的一个文件/目录,可以获取文件/目录的一些属性信息:
文件/目录的名字
文件的大小
文件/目录的最后修改时间
文件/目录是否可读、是否可写
public File(String pathname)
:通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。(路径可以不存在)
public File(String parent, String child)
:从父路径名字符串和子路径名字符串创建新的 File实例。
public File(File parent, String child)
:从父抽象路径名和子路径名字符串创建新的 File实例。
//1.构造方法:File(String pathName)
File file1 = new File("d:\\demo03.txt");//文件名--绝对路径
File file2 = new File("d:\\单级目录");//目录名--绝对路径
File file3 = new File("demo02.txt");//文件名--相对路径
File file4 = new File("d:\\jfewjfkeljfdsljfkljfksljfdkslajfdkslafjs");//不存在
//2.构造方法:File(String parent,String child)
File file5 = new File("d:\\", "demo03.txt");//效果同:file1
//3.构造方法:File(File parent,String child)
File file6 = new File("d:\\");
File file7 = new File(file6, "demo03.txt");//效果同:file5和file1
1)、绝对路径:是带盘符的全路径;
2)、绝对路径:不带盘符的,从项目根目录下找;
public String getAbsolutePath()
:返回此File的绝对路径名字符串。
public String getPath()
:返回此File对象封装的路径名字符串
public String getName()
:返回由此File表示的文件或目录的名称。
public long length()
:返回由此File表示的文件的长度(不能用于目录)
public static void main(String[] args) {
File file1 = new File("d:\\demo03.txt");//绝对路径--文件存在
File file2 = new File("demo03.txt");//相对路径--文件不存在
System.out.println("file1的绝对路径:" +file1.getAbsolutePath());
System.out.println("file2的绝对路径:" +file2.getAbsolutePath());
System.out.println("file1封装的路径:" + file1.getPath());
System.out.println("file2封装的路径:" + file2.getPath());
System.out.println("file1的文件名:" + file1.getName());
System.out.println("file2的文件名:" + file2.getName());
System.out.println("file1的文件大小:" + file1.length());
}
public boolean exists()
:此File表示的文件或目录是否实际存在。
public boolean isDirectory()
:此File表示的是否为目录。
public boolean isFile()
:此File表示的是否为文件。
public static void main(String[] args) {
File file1 = new File("d:\\demo03.txt");//绝对路径--文件存在
File file2 = new File("demo03.txt");//相对路径--文件不存在
System.out.println("file1是否存在:" + file1.exists());//true
System.out.println("file2是否存在:" + file2.exists());//false
System.out.println("file1是否是目录:" + file1.isDirectory());//false
System.out.println("file2是否是目录:" + file2.isDirectory());//false
System.out.println("file1是否是文件:" + file1.isFile());//true
System.out.println("file2是否是文件:" + file2.isFile());//false
File file3 = new File("d:\\单级目录");
System.out.println("file3是否存在:" + file3.exists());//true
System.out.println("file3是否是文件:" + file3.isFile());//false
System.out.println("file3是否是目录:" + file3.isDirectory());//true
}
}
public boolean createNewFile()
:当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。(创建成功返回true,创建失败,返回false)
public boolean delete()
:删除由此File表示的文件或目录。(彻底删除,只能删除空目录和文件)
public boolean mkdir()
:创建由此File表示的目录。(创建单级目录)
public boolean mkdirs()
:创建由此File表示的目录,包括任何必需但不存在的父目录。(创建多级目录)
public static void main(String[] args) throws IOException {
File file1 = new File("demo05.txt");
System.out.println("创建文件:" + file1.createNewFile());
File file2 = new File("aaa");
System.out.println("创建文件:" + file2.createNewFile());
File file3 = new File("bbb");
System.out.println("创建目录:" + file3.mkdir());
File file4 = new File("demo05_2.txt");
System.out.println("创建目录:" + file4.mkdir());
File file5 = new File("demo05\\demo04\\demo03");
System.out.println("创建多级目录:" + file5.mkdirs());
System.out.println("删掉demo05.txt : " + file1.delete());
System.out.println("删除空目录:" + file3.delete());//不能删除非空目录
}
public File[] listFies()
:获取此目录下的所有文件/目录下的文件对象,并存为数组
public static void main(String[] args) {
File file = new File("d:\\");
File[] fileArray = file.listFiles();
for (File f : fileArray) {
System.out.println((f.isFile()? "文件:" : "目录:") + f.getAbsolutePath());
}
}
注意:listFiles在以下情况下返回null:
1)、当前的File对象表示的是一个文件;
2)、当前的File对象表示的是一个系统目录;
3)、当前的File对象表示的目录不存在
如果File对象是一个存在的空目录,listFile会返回一个0长度的数组
public class Demo {
public static void main(String[] args) {
f1();
System.out.println("a");
}
private static void f1() {
f2();
System.out.println("b");
}
private static void f2() {
f3();
System.out.println("c");
}
private static void f3() {
System.out.println("d");
}
}
递归:方法的递归调用,指方法调用自己本身
public class Demo {
private static int count = 0;
public static void main(String[] args) {
f1();
}
private static void f1() {
count++;
System.out.println("f1... count = " + count);
f1();
}
}
注意:
1)递归的层次不能太深,否则“栈溢出”
2)、必须要有出口,否则就是“死递归”
3)、构造方法不能使用递归调用
public class Demo {
private static int count = 0;
public static void main(String[] args) {
f1();
}
private static void f1() {
count++;
System.out.println("f1... count = " + count);
if (count == 3) {
return;//设置出口
}
f1();
}
}
求阶乘:如5!=5 * 4 * 3 * 2 * 1
使用循环:
int result = 1;
for(int i = 1 ;i <= 5; i++){
result = result * i;
}
System.out.println("结果是:" + result);
使用递归:
public static void main(String[] args){
int num = 5;
System.out.println(num + " 的阶乘为:" + jieCheng5(num));
}
public static int jieCheng5(int num){
if(num == 1){
return 1;//出口
}
return num * jieCheng5(num - 1);
}
public class Demo {
public static void main(String[] args) {
//需求:将d:\\aaa2目录下所有的文件查找出来,并打印其绝对路径
/*
1).封装初始目录:
---------------递归方法--------------
2).获取此目录下所有的子文件/子目录的File[]数组
3).遍历数组,判断是否是文件:
是:打印
否:从步骤2 到这里形成递归
*/
//1).封装初始目录:
File dir = new File("d:\\aaa2");
listFiles(dir);
}
private static void listFiles(File dir)
//2).获取此目录下所有的子文件/子目录的File[]数组
File[] fileArray = dir.listFiles();
//3).遍历数组,判断是否是文件:
if (fileArray != null) {
for (File f : fileArray) {
if (f.isFile()) {
System.out.println(f.getAbsolutePath());
}else{
listFiles(f);
}
}
}
}
}
public class Demo {
public static void main(String[] args) {
//1.封装初始目录
Scanner sc = new Scanner(System.in);
System.out.println("请输入查询路径:");
String path = sc.nextLine();
System.out.println("请输入要搜索的后缀名(例如:avi):");
String suffix = sc.next();
File dir = new File(path);
listFiles(dir,suffix);
}
private static void listFiles(File dir,String suffix) {
//2.列出此目录下所有的子文件/子目录的数组
File[] fileArray = dir.listFiles();
//3.遍历
if (fileArray != null) {
for (File f : fileArray) {
if (f.isFile() && f.getName().endsWith("." + suffix)) {
System.out.println(f.getAbsolutePath());
}else{
listFiles(f,suffix);
}
}
}
}
}
public static void main(String[] args) {
File f = new File("d:\\aaa2");
File[] fileArray = f.listFiles(new FileFilter() {//过滤器
@Override
public boolean accept(File pathname) {//筛网--listFiles方法会将f的每个子文件/子目录都走一下这个筛网
if (pathname.isFile() && pathname.getName().endsWith(".txt")) {
return true;//保留--会存储到数组中
}
return false;//丢弃
}
});
System.out.println("数组大小:" + fileArray.length);
}
public class Demo {
public static void main(String[] args) {
//搜索:"D:\20180903(76期)_就业班(上午)"目录下所有的.avi文件
File dir = new File("D:\\20180903(76期)_就业班(上午)");
listFiles(dir);
}
private static void listFiles(File dir) {
File[] fileArray = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
if((pathname.isFile() && pathname.getName().endsWith(".avi")) || pathname.isDirectory()){
return true;
}
return false;
}
});
//遍历
if (fileArray != null) {
for (File f : fileArray) {
if (f.isFile()) {
System.out.println(f.getAbsolutePath());
}else{
listFiles(f);//递归调用
}
}
}
}
}
public class Demo {
public static void main(String[] args) {
//搜索:"D:\20180903(76期)_就业班(上午)"目录下所有的.avi文件
File dir = new File("D:\\20180903(76期)_就业班(上午)");
listFiles(dir);
}
private static void listFiles(File dir) {
File[] fileArray = dir.listFiles((File pathname) -> {
if((pathname.isFile() &&
pathname.getName().endsWith(".avi"))
|| pathname.isDirectory()){
return true;
}
return false;
}
);
//遍历
if (fileArray != null) {
for (File f : fileArray) {
if (f.isFile()) {
System.out.println(f.getAbsolutePath());
}else{
listFiles(f);//递归调用
}
}
}
}
}
[ ] 能够说出File对象的创建方式
File file = new File("路径");
File file = new File("父路径","子路径");
File parent = new File("父路径");
File file = new File(parent,"子路径");
[ ] 能够说出File类获取名称的方法名称
getName();
[ ] 能够说出File类获取绝对路径的方法名称
getAbsolutePath();//获取绝对路径
getPath();//获取封装的文件路径
[ ] 能够说出File类获取文件大小的方法名称
length();
[ ] 能够说出File类判断是否是文件的方法名称
isFile();
[ ] 能够说出File类判断是否是文件夹的方法名称
isDirectory();
[ ] 能够辨别相对路径和绝对路径
绝对路径:从盘符开始的路径
相对路径:从当前文件夹开始
[ ] 能够遍历文件夹
File file = new File("路径");
File[] fileArray = file.listFile();
for(File f:fileArray){
System.out.println(f.getAbsolutePath(););
}
[ ] 能够解释递归的含义
方法自己调用自己
[ ] 能够使用递归的方式计算5的阶乘
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
System.out.println(num+"的阶乘为:"+jianCheng(num));
public int jianCheng(int num){
if(num == 1){
return 1;
}else{
return num * janCheng(num - 1);
}
}
[ ] 能够说出使用递归会内存溢出隐患的原因
没有出口的递归,一直压栈,没有弹栈