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());
                }
            }
        }
    }
}

posted @ 2023-03-05 22:35  大宝贝94106  阅读(26)  评论(0)    收藏  举报