File
File类:
- 文件进行持久化数据的工具 - 持久化:将缓冲中的文件(对象)永久保存
- File类的一个对象代表一个文件或文件夹 - 理解
- 文档上说明File类文件或者是文件路径,我们可以通过这个路径找到相应的文件或文件夹
构造方法:public File(String pathName)
路径:
绝对路径:从盘符开始到文件的路径 - 相当于是一个地址
相对路径:从某个参照路径开始到指定文件的路径
在java中,对于分辨路径的分隔符可以支持/或\是通用的。
File类中的方法:
构造函数:
- public File(String parent,String child):parent指父级目录,child指子级目录
- 1.直接给予路径
- 2.路径为父亲(该文件夹或者是文件所在的文件夹)与孩子(该文件夹自己或文件)
- 说明:
在new File()的时候,只是将File对象在内存中实例化,实际上并没有真正的创建文件!
所以需要本身这个文件,才可以通过传入路径找到这个文件。
获取的方法:
- 1.String getAbsolutePath() - 获取绝对路径
- 2.String getPath() - 获取路径(用什么方式创建对象,就返回什么路径)
- 3.String getName() - 获取文件或者文件夹名字
- 4.String getParent() - 返回所在文件夹的路径(根据对象创建时的路径 - 相对或绝对) ```java import java.io.File;
public class FileMethod { public static void main(String[] args) { File f = new File(“content.txt”); System.out.println(f.getPath());//用什么方式创建返回什么路径 System.out.println(f.getName());//文件名 System.out.println(f.getParent());//null System.out.println(f.getAbsolutePath());//返回绝对路径 File f1 = new File(“D:\jerry\work\java-upgrade\content.txt”); System.out.println(f1.getParent());//D:\jerry\work\java-upgrade } }
**getParent()方法返回的是创建时所在文件夹的路径,创建时使用的是相对路径,返回则是所在文件夹的相对路径。**<br />**反之亦然。**<br />**
<a name="GohnN"></a>
### 删除和添加的方法:
* File类中可以删除和创建文件(java中删除时不使用window的回收站)
* boolean delete() - 删除文件<br />* boolean createNewFile() - 创建一个文件 - 抛出一个异常IOException<br />* 在创建文件的时候,如果文件所在的文件夹不存在,则会报错系统找不到路径,必须确保文件夹存在<br />
* boolean mkdir() - 创建单个文件夹<br />* 在创建文件的时候,如果文件所在的父级文件夹不存在,则会报错系统找不到路径,必须确保父级文件夹存在<br />
* boolean mkdirs() - 一次创建多个文件夹<br />* boolean delete() 注意点:删除文件夹的时候不能为非空(有东西),否则删除失败!
<a name="pq9Qf"></a>
### 判断方法 - 返回值都是boolean类型的
**方法:**
- boolean exists() 判断文件或是文件夹是否存在
- boolean isDirectory() 判断文件对象是否为文件夹(目录)
- boolean isFile() 判断这个文件对象是不是文件
<a name="UzWZj"></a>
### 特殊且实用的获取方法:
**用来获取所有的文件对象的方法**<br />**File() listFile() - 获取调用的方法的文件夹下的所有的file对象(文件夹或文件)**<br />**
<a name="09942702"></a>
# 递归
<a name="clBcU"></a>
## 递归方法的基础
**递归:方法自己调用自己**<br />**分为两种:**
- **1.直接递归 - 直接调用自己**
- **2.间接递归 - 当方法A调用方法B,方法B调用方法C,方法C调用方法A**
- 方法是可以相互调用的:
- 使用递归的时候要注意设置递归出口 - 结束条件
```java
/**
*
* 当前案例的调用过程:间接递归
* main-A(未执行完)-B(未执行完)-C(未执行完)-D(执行完)-C(执行完)-B(执行完)-A(执行完)
*
*/
public class DiguiDemo {
//成员变量
private static int i = 1;
public static void main(String[] args) {
//调用方法A
methodA();
}
//模拟递归
public static void methodA(){
System.out.println("方法A:"+i);
i++;
methodB();
i++;
System.out.println("方法A:"+i);
}
public static void methodB(){
System.out.println("方法B:"+i);
i++;
methodC();
i++;
System.out.println("方法B:"+i);
}
public static void methodC(){
System.out.println("方法C:"+i);
i++;
methodD();
i++;
System.out.println("方法C:"+i);
}
public static void methodD(){
System.out.println("方法D:"+i);
}
}
递归的算法
- 方法自身调用自身的方法,必须要有方法的出口(可以结束方法的条件),递归的次数不宜过多。
容易造成栈内存溢出错误 - StackOverflowError ```java /**
- 递归方法的基础: *
- 运行过程:
main-method_1(没有结束)-method_2(没有结束)-method_3(结束)-method_2(结束)-method_1(结束) */ public class DiguiDemo2 {
//成员变量 private static int i = 1;
public static void main(String[] args) {
//调用方法 method();}
//递归 public static void method(){
System.out.println("方法开始:"+i); //是指递归的出口 if(i==3){ return;//结束方法并返回结果 } i++; method(); i++; System.out.println("方法结束:"+i);} }
```
