IO流-File
File类
/*
File:文件和目录路径名的抽象表示
1:文件和目录是可以通过File封装成对象的
2:对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。
将来是要通过具体的操作把这个路径的内容转换为具体存在的
构造方法:
File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File(String parent,String child):从父路径名字符串和子路径名字符串创建新的 File实例。
File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
*/
package IO.File;
import java.io.File;
public class File_1 {
public static void main(String[] args) {
//File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。
File f1 = new File("d:\\2\\abc.txt");
System.out.println(f1);
//File(String parent,String child):从父路径名字符串和子路径名字符串创建新的 File实例。
File f2 = new File("\"d:\\\\2","abc.txt");
System.out.println(f2);
//File(File parent, String child):从父抽象路径名和子路径名字符串创建新的 File实例。
File f3 = new File("d:\\2");
File f4 = new File(f3,"abc.txt");
System.out.println(f4);
}
}
File类的创建功能
/*
1.2 File类创建功能
方法名 说明
public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
如果文件不存在,就创建文件,返回true
如果文件存在, 就不创建文件,返回false,
public boolean mkdir() 创建由此抽象路径名命名的目录
如果目录不存在,就创建目录,返回true
如果目录存在, 就不创建目录,返回false,
public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
同理.
*/
package IO.File;
import java.io.File;
import java.io.IOException;
public class File_2_Method {
public static void main(String[] args) throws IOException {
//1.需要在d:\\2目录下创建java.txt文件.
File f1 = new File("d:\\2\\java.txt");
System.out.println(f1.createNewFile());
System.out.println("---------");
//2.需要在d:\\2目录下创建目录javaSE
File f2 = new File("d:\\2\\javaSE");
System.out.println(f2.mkdir());
System.out.println("---------");
//3.需要在d:\\2目录下创建多级目录cat\\pig
File f3 = new File("d:\\2\\a\\b");
System.out.println(f3.mkdirs());
//创建文件就要用createNewFile方法, 创建目录就要用mkdir方法, 以免文件和目录同名.
}
}
/*
File类的判断和获取功能:
public boolean isDirectory():测试此抽象路径名表示的File是否为目录
public boolean isFile():测试此抽象路径名表示的File是否为文件
public boolean exists():测试此抽象路径名表示的File是否存在
public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
public String getPath():将此抽象路径名转换为路径名字符串
public String getName():返回由此抽象路径名表示的文件或目录的名称
public String[] list():返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的FiLe对象数组
*/
package IO.File;
import java.io.File;
public class GetEstimate_Method {
public static void main(String[] args) {
File f1 = new File("d:\\2\\java.txt");
// public boolean isDirectory():测试此抽象路径名表示的File是否为目录
// public boolean isFile():测试此抽象路径名表示的File是否为文件
// public boolean exists():测试此抽象路径名表示的File是否存在
System.out.println(f1.isDirectory());//false
System.out.println(f1.isFile()); //true
System.out.println(f1.exists()); //true
System.out.println("----------");
// public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
// public String getPath():将此抽象路径名转换为路径名字符串
// public String getName():返回由此抽象路径名表示的文件或目录的名称
System.out.println(f1.getAbsolutePath());//d:\2\java.txt
System.out.println(f1.getPath());//d:\2\java.txt
System.out.println(f1.getName());//java.txt
// public String[] list():返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
// public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的FiLe对象数组
System.out.println("----------");
File file = new File("d:\\2");
String[] list = file.list();
for (String i:list){
System.out.println(i);
}
System.out.println("----------");
File[] f2 = file.listFiles(); //得到File对象数组
for (File i : f2){ //对对象进行操作了,调用方法等
if (i.isFile()){
System.out.println(i.getName());
}
}
}
}
package IO.File;
import java.io.File;
import java.io.IOException;
/* 关于创建文件失败,报错: "系统找不到指定的路径"的问题.
相对路径是相对于当前文件的路径,所以在IDEA中的相对路径,相对的是该项目的路径,
当前我的项目的路径是"IdeaProjects\\Module", 但是IDEA默认的根路径是"IdeaProjects\\EmptyPro"
(在程序中创建java.txt文件发现的),也就是说我在用相对路径在我的项目中创建文件都会报错!
*/
public class File_3Delete {
public static void main(String[] args) throws IOException {
File f1 = new File("java.txt");
System.out.println(f1.createNewFile()); //只写文件名创建的文件与模块同级目录
System.out.println(f1.delete());
System.out.println("------------");
//需求1: 在当前模块下创建java.txt文件
//在本模块下创建java.txt文件,这里只能用绝对路径
File f2 = new File("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\java.txt");
System.out.println(f2.createNewFile());
//需求2: 删除当前模块目录下的java.txt文件
System.out.println(f2.delete()); //删除文件
System.out.println("------------");
//需求3: 在当前模块下创建itcast目录
File f3 = new File("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\itcast");
System.out.println(f3.mkdir()); //创建目录
//需求3: 删除前模块下的itcast目录
System.out.println(f3.delete()); //删除目录
//需求5: 在当前模块下创建一个目录itcast, 并在之下创建java.txt文件,(只能先创建目录后创建文件)
File file = new File("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\itcast");
System.out.println(file.mkdir()); //先创建目录
File file1 = new File("C:\\Users\\BigBaby\\IdeaProjects\\Module01\\itcast\\java.txt");
System.out.println(file1.createNewFile()); //再创建文件(字符串中还不能有空格!!)
//需求6: 删除上面的目录和文件
System.out.println("------------");
System.out.println(file1.delete()); //先删除文件
System.out.println(file.delete()); //再删除目录
/*
总结: 创建文件: 先创建目录,再创建文件. 删除文件: 先删除文件,再删除目录..
*/
}
}
/*
不死神兔问题: 求第20个月的兔子对数
每个月的兔子对数: 1,1,2,3,5,8...
*/
package IO.File;
public class recursion_1 {
//for循环方法实现
public static void main(String[] args) {
int [] array = new int[20]; //
array[0] = 1; //第一,第二月为1
array[1] = 1;
for (int i = 2; i<array.length; i++){
array[i]=array[i-1]+array[i-2];
}
System.out.println(array[19]);//for循环方法
System.out.println( f(20)); //recursion方法
}
//递归方法实现(recursion)
//定义一个方法f(n)表示第n个月的对数,f(n)=f(n-1)+f(n-2)
//如果没有出口(if语句条件限制)就会无限循环下去,报错StackOverFlowError:栈溢出
public static int f(int n){
if (n==2||n==1){ //如果是第1,2个月就返回 1
return 1;
}else { //否则, 执行递归.
return f(n-1)+f(n-2);
}
}
}
package IO.File;
/*
案例:递归求阶乘
需求:用递归求5的阶乘,并把结果在控制台输出
分析:
① 阶乘:一个正整数的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n!
5! = 5*4*3*2*1
② 递归出口:1! = 1
③ 递归规则:n!=n*(n-1)!
5! = 5*4!
思路:
①定义一个方法,用于递归求阶乘,参数为一个int类型的变量
②在方法内部判断该变量的值是否是1
是1:返回1
不是1:返回n*(n—1)!
③ 调用方法
④ 输出结果
*/
public class recursion_2 {
public static void main(String[] args) {
//③ 调用方法③ 调用方法
int result = jc(5);
//④ 输出结果
System.out.println(result);
}
//①定义一个方法,用于递归求阶乘,参数为一个int类型的变量
public static int jc(int n){
//②在方法内部判断该变量的值是否是1
if (n==1){
return 1;//是1:返回1
}else {
return n*jc(n-1);//不是1:返回n*(n—1)!
}
}
}
/*
案例:遍历目录
需求:给定一个路径(E:\\itcast),请通过递归完成遍历该目录下的所有内容,并把所有文件的绝对路径输出在控制台
思路:
① 根据给定的路径创建一个File对象
②定义一个方法,用于获取给定目录下的所有内容,参数为第1步创建的File对象
③ 获取给定的File目录下所有的文件或者目录的File数组
④ 遍历该File数组,得到每一个File对象
⑤ 判断该File对象是否是目录
是:递归调用
不是:获取绝对路径输出在控制台
⑥调用方法
*/
package IO.File;
import java.io.File;
public class recursion_3 {
public static void main(String[] args) {
//① 根据给定的路径创建一个File对象
File f1 = new File("d:\\2");
//调用方法
getAllFilePath(f1);
}
//②定义一个方法,用于获取给定目录下的所有内容,参数为第1步创建的File对象
public static void getAllFilePath(File srcfile){
//③ 获取给定的File目录下所有的文件或者目录的File数组
File[] filesArray = srcfile.listFiles();
//④ 遍历该File数组,得到每一个File对象
if (filesArray!=null){ //增强健壮性
for (File i :filesArray){ //遍历对象数组
//⑤ 判断该File对象是否是目录
if (i.isDirectory()){ //如果是目录
getAllFilePath(i); //递归调用
}else { //如果是文件就输出绝对路径名
System.out.println(i.getAbsolutePath());
}
}
}
}
}