乐趣区

关于java:IO流-File

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<arr.length;i++){arr[i] = arr[i - 1] + arr[i - 2];
}
sout(arr[19]);
// 用递归来解决问题
/*
递归解决问题,首先就是定义一个办法:定义一个办法 f(n)示意第 n 个月的兔子对数
那么,第 n—1 个月的兔子对数应该如何示意呢?f(n-1)
同理,第 n—2 个月的兔子对数应该如何示意呢?f(n-2)
*/
sout(f(20));
public static int f(int n){if(n==1||n==2){return 1;}else{return f(n:n-1)+f(n:n-2);
    } 
}
// 抛出 error StackOverFlowError:当堆栈溢出产生时抛出一个应用程序递归太深
// 递归解决问题肯定要有进口,不然就始终递归


案例 递归求阶乘


// 调用办法
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());
            }
        }
    }
}

输入

退出移动版