1、File
1.1、File类概述和构造
File:它是文件和目录路径名的抽象表示
- 文件和目录是可以通过File封装成对象的
- 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的,将来是要通过具体的操作把这个路劲的内容转换为具体存在的
package com.itheima01;
/*
File(String pathname) 通过将给定的路劲名字符串转换为抽象路劲名来创建新的File实例
File(String parent ,String child) 从父路径名字符串和子路径名字符串创建新的File实例
File(File parent,String child) 从父抽象路径名和子路径名字符串创建新的File实例
*/
import java.io.File;
public class FileDemo {
public static void main(String[] args) {
// File(String pathname) 通过将给定的路劲名字符串转换为抽象路劲名来创建新的File实例
File f1=new File("C:\\Users\\86185\\Desktop");
System.out.println(f1);
// File(String parent ,String child) 从父路径名字符串和子路径名字符串创建新的File实例
File f2=new File("C:\\Users","86185");
File f3=new File("C:\\Users\\86185","Desktop");
System.out.println(f2);
System.out.println(f3);
// File(File parent,String child) 从父抽象路径名和子路径名字符串创建新的File实例
File f=new File("C:\\Users\\86185");
File f4=new File(f,"Desktop");
System.out.println(f4);
}
}
如果要在同一个文件夹操作多个文件,File(String parent ,String child) 从父路径名字符串和子路径名字符串创建新的File实例 File(File parent,String child) 就有用了,new一个文件路径后面就不用写那么多重复的父路径了。
1.2、File类创建功能
方法一一对应,创建文件就用file.createNewFile()
public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 如果文件不存在,就创建文件返回true 如果文件存在,就不创建文件,返回false public Boolean mkir() 创建由此抽象路径名命名的目录 如果目录不存在,就创建目录返回true 如果目录存在,就不创建目录,返回false public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必须但不存在的父目录 如果目录不存在,就创建目录返回true 如果目录存在,就不创建目录,返回false
package com.itheima02;
/*
public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
如果文件不存在,就创建文件返回true
如果文件存在,就不创建文件,返回false
public Boolean mkir() 创建由此抽象路径名命名的目录
如果目录不存在,就创建目录返回true
如果目录存在,就不创建目录,返回false
public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必须但不存在的父目录
*/
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException{
// 需求1:在D:\\itcast目录下创建一个文件java.txt 首先要由根目录 需要抛出问题
File f1=new File("D:\\itcast\\java.txt");
System.out.println(f1.createNewFile());
// 需求2:在D:\\itcast目录下创建一个目录JavaSE
File f2=new File("D:\\itcast\\JavaSE");
System.out.println(f2.mkdir());
// 需求3:在D:\\itcast目录下创建一个多级目录JavaWEB\\HTML
File f3=new File("D:\\itcast\\JavaWEB\\HTML");
System.out.println(f3.mkdirs());
// 需求4:在D:\\itcast目录下创建一个文件javase.txt
File f4=new File("D:\\itcast\\javase.txt");
System.out.println(f4.mkdir());
}
}
1.3、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 [ ] listFile() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
package com.itheima03;
/*
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 [] listFile() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
*/
import java.io.File;
import java.nio.file.Files;
public class FileDemo {
public static void main(String[] args) {
File f1=new File("myFile\\com\\java.txt");
//public boolean isDirectory() 测试此抽象路径表示的File是否为目录
System.out.println(f1.isDirectory());
//public boolean isFile() 测试此抽象路径名表示的File是否为文件
System.out.println(f1.isFile());
//public boolean exists() 测试此抽象类路径名表示的File是否存在
System.out.println(f1.exists());
//public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
System.out.println("f1.getAbsoluteFile() "+f1.getAbsoluteFile());
//public String getPath() 将此抽象路径名转换为路径名字符串
System.out.println("f1.getPath() "+f1.getPath());
//public String getName() 将此抽象路径名表示的文件或目录的名称
System.out.println("getName()将此抽象路径名表示的文件或目录的名称:"+f1.getName());
//public String [] list() 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组
File f2=new File("D:\\itcast");
String [] strArray = f2.list();
for (String s:strArray)
{
System.out.println(s);
}
//public File [] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象 数组
System.out.println("----listFiles()的File对象 数组----");
File[] fileArray = f2.listFiles();
for (File files:fileArray)
{
// System.out.println(files); 可以用来调用文件
if (files.isFile())
{
System.out.println(files.getName());
System.out.println(files.getPath());
}
}
}
}
1.4、File类删除功能
绝对路径:D:\\yl\\java\\JavaCode\\myFile
相对路径:myFile\\java.txt
注意:如果一个目录中有内容(目录/文件),不能直接删除,需要先删除子目录/文件
package com.itheima04;
import java.io.File;
import java.io.IOException;
public class FileDemo {
public static void main(String[] args) throws IOException {
// 需求1:在当前模块目录下创建java.txt文件
File f1=new File("D:\\yl\\java\\JavaSE_Code\\myFile\\src\\com\\javaee.txt");
// File f1=new File("myFile\\java.txt");
// System.out.println(f1.createNewFile());
// 需求2:删除当前模块目录下创建java.txt文件
System.out.println(f1.delete());
// 需求3:在当前模块目录下创建itcast目录
File f2=new File("D:\\yl\\java\\JavaSE_Code\\myFile\\itcast");
System.out.println(f2.mkdir());
// 需求4:删除当前模块目录下的itcast目录
System.out.println(f2.delete());
// 需求5:在当前模块下创建一个目录itcast,然后在该目录下创建一个文件java.txt
File f3=new File("D:\\yl\\java\\JavaSE_Code\\myFile\\itcast");
System.out.println(f3.mkdir());
File f4=new File(f3,"java.txt");
// System.out.println(f4.createNewFile());
// 需求6:删除当前模块下的目录itcast 首先我们要删除模块下的文件,然后再删除目录
// System.out.println(f3.delete());//此时文件目录下还有文件所以不能删除
System.out.println(f4.delete());
System.out.println(f3.delete());
}
}
1.5、递归
递归概述:以编程的角度来看,递归指的是方法定义中调用的方法本身现象
递归解决问题的思路:
把一个复杂问题层层转化为一个与原问题相似的规模较小的问题求解
递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算
递归解决问题要找到两个内容
- 递归出口:否则会出现内存溢出
- 递归规则:与原问题相似的规模较小的问题
package com.itheima05;
public class FileDemo {
public static void main(String[] args) {
// 前面我们学过,不死神兔的程序,每个月的兔子数=前两个月兔子之和
int []arr=new int[20];
arr[0]=1;
arr[1]=1;
for (int i=2;i<arr.length;i++)
{
arr[i]=arr[i-1]+arr[i-2];
}
System.out.println(arr[19]);
System.out.println(f(20));
//StackOverflowError 报错了,应用程序递归太深 内存外溢了,我们需要做出判断
}
//还可以通过递归的方式
public static int f(int n)
{
if (n==1||n==2)
{
return 1;
}else{
return f(n-1)+f(n-2);
}
}
}