File
File类概述和构造方法
在java.IO包下,是具体的类,实现了两个接口,Serializable,Comparable,是文件和目录路径名的抽象表示,
File f1 = new File(pathname:"E:\\itcast\\java.txt");
sout(f1);//重写了toString方法,直接输出封装的路径名,且文件并不一定要存在
File f2 = new File(parent:"E:\\itcast",child:"java.txt");
sout(f2);
File f3 = new File(pathname:"E:\\itcast");
File f4 = new File(f3,child:"java.txt");
sout(f4);
输出 三个构造方法都指向一样的内容
File类创建功能
//在E:\\itcast目录下创建一个文件
//如果文件不存在,就创建文件,并返回true;如果文件存在,就不创建文件,并返回false
File f1 = new File(pathname:"E:\\itcast\\java.txt");
sout(f1.creatNewFile());//会产生异常要在上面抛出throws IOException 会输出true 说明文件创建成功 如果再次创建就会变成false,因为文件已经存在
//在E:\\itcast目录下创建一个目录javaSE
//如果目录不存在,就创建目录,并返回true;如果目录存在,就不创建目录,并返回false
File f2 = new File(pathname:"E:\\itcast\\javaSE");
sout(f2.mkdir());//mkdir不能创建多级目录
//在E:\\itcast目录下创建一个目录javaWEB\\HTML
//如果目录不存在,就创建目录,并返回true;如果目录存在,就不创建目录,并返回false
File f3 = new File(pathname:"E:\\itcast\\javaWEB\\HTML");
sout(f3.mkdirs());//mkdirs能创建多级目录
//在E:\\itcast目录下创建一个文件javase.txt
File f4 = new File(pathname:"E:\\itcast\\javase.txt");
sout(f4.mkdir());//mkdir能创建目录 调用这个方法会变成创建目录而不是文件
//判断是创建的文件害死目录,要看调用的方法
//同一个文件目录下不能存在相同名字的文件和目录(文件夹)
输出
File类判断和获取功能
//创建一个file对象
File f = new File(pathname:"myFile\\java.txt");
//测试
//f.isDirectory()测试此抽象路径名表示的File是否为目录
sout(f.isDirectory());
//f.isFile()测试此抽象路径名表示的File是否为文件
sout(f.isFile());
//f.exists()测试此抽象路径名表示的File是否存在
sout(f.exists());
//f.getAbsolutePath()返回此抽象路径名的绝对路径名字符串
sout(f.getAbsolutePath());
//f.getPath()将此抽象路径名转换为路径名字符串
sout(f.getPath());/封装的路径
//f.getName()返回此抽象路径名表示的文件或目录的名称
sout(f.getName());//文件的名称
File f2 = new File(pathname:"E:\\itcast");
//f.list()返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
String[] strArray = f2.list();
for(String str : strArray){
sout(str);//输出当前目录下文件和文件夹的名称
}
//f.getName()返回此抽象路径名表示的目录中的文件和目录的File对象数组
String[] fileArray = f2.listFiles();
for(String file : fileArray){
sout(file);//输出当前目录下文件和文件夹的绝对路径
}
输出
File类删除功能
File f1 = new File(pathname:"E:\\itcaste\\java.txt");
File f2 = new File(pathname:"java.txt");//文件就和模块是同级目录
//需求1:在当前模块目录下创建java.txt文件
File f3 = new File(pathname:"myFile\\java.txt");
sout(f3.creatNewFile());
需求2:删除当前模块目录下的java.txt文件
File f1 = new File(pathname:"myFile\\java.txt");
sout(f1.delete());
输出
需求3:在当前模块下创建itcast目录
File f2 = new File(pathname:"myFile\\itcast");
sout(f2.mkdir());
需求4:删除当前模块下的itcast目录
File f2 = new File(pathname:"myFile\\itcast");
sout(f2.delete());
需求5:在当前模块下创建一个目录itcast,然后在该目录下创建一个文件java.txt
File f3 = new File(pathname:"myFile\\itcast");
sout(f3.mkdir());
File f4 = new File(pathname:"myFile\\itcast\\java.txt");
sout(f4.creatNewFile());
//在创建文件之前首先要创建目录
输出
需求6:删除当前模块下的目录itcast,然后在该目录下创建一个文件java.txt
File f3 = new File(pathname:"myFile\\itcast");
File f4 = new File(pathname:"myFile\\itcast\\java.txt");
sout(f4.delete());//删除目录下的内容
sout(f3.delete());//删除木目录
//因为如果你要删除的目录下面有内容,该目录是不能直接删的,首先要删除目录下的内容,才能删除目录
递归
以编程的角度看,递归指的是方法定义中调用方法本身的现象
//不死神兔问题
//每个月的兔子对数,1,1,2,3,5,8,……
int[] arr = new [20];
arr[0] = 1;
arr[1] = 1;
for(int i = 2;i
案例 递归求阶乘
//调用方法
int result = jc(n:5);
//输出
sout(result);
//定义一个方法
public static int jc(int n){
if(n == 1){
return 1;
}else{
return n*jc(n:n-1);
}
}
在内存中执行流程
当递归到1的时候方法就结束了,方法结束就要从栈内存消失,然后利用返回值计算
遍历目录
/根据给定的路径创建一个File对象
File srcFile = new File(pathname:"E:\\itcast");
//调用方法
getAllFilePath(srcFile);
//定义一个方法,用于获取给定目录下的所有内容,参数为第一步创建的file对象 递归
public static void getAllFilePath(File srcFile){
//获取给定的File目录下所有的文件或者目录的File数组
File[] fileArray = srcFile.listFiles();
//遍历该File数组,得到每一个file对象
if(fileArray != null){
for(File file : Array){
//判断该File对象是否是目录
if(file.isDirectory()){
//是,递归调用
getAllFilePath(file);
}else{
//不是,获取绝对路径输出在控制台,也就是文件
sout(file.getAbsolutePath());
}
}
}
}
输出