一、File
1.1 简介
- 文件和目录路经名的抽象表示形式==>可以把文件或者文件的路径构成一个File可以使用其方法
- 路径: 绝对路径与相时路径
- 绝对路径:从隔壁盘符开始的路径
- 相对路径:相对于具体参照物的路径
1.2 构造方法
构造方法的名称 | 构造方法的描述 |
---|---|
public File(File parent, String child) | 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例 |
public File(String pathname) | 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例 |
public File(String parent, String child) | 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例 |
代码:
import java.io.File;
public class Demo01 {
public static void main(String[] args) {
File f = new File(new File("D:\\admin"),"2.txt");
File f1 = new File("D:\\admin","2.txt");
File f2 = new File("D:\\admin\\ad\\1.txt");
}
}
1.3 创建的方法
方法的名称 | 方法的描述 |
---|---|
public boolean createNewFile() | 创建文件 |
public boolean mkdir() | 创建文件夹(只能创建一级目录) |
public boolean mkdirs() | 创建文件夹(创建多级目录) |
代码:
import java.io.File;
import java.io.IOException;
public class Test02 {
public static void main(String[] args) throws IOException {
File f = new File("D:\\admin\\1.txt");
//创建文件
f.createNewFile();
//创建文件夹 一级目录
File f1 = new File("D:\\admin\\a\\b\\c");
f1.mkdir();
//创建文件夹 多级目录
File f2 = new File("D:\\admin\\a\\b\\c");
f2.mkdirs();
}
}
1.4 删除文件或者文件夹
方法的名称 | 方法的描述 |
---|---|
public boolean delete() | 删除文件以及空的文件(不能是多级目录) |
代码:
import java.io.File;
public class Test04 {
public static void main(String[] args) {
//删除文件 构建一个File对象
File f = new File("D:\\admin\\a\\b\\1.txt");
//删除文件
f.delete();
//删除空的文件夹
File f1 = new File("d:\\admin\\a\\b");
f1.delete();
//删除多级目录的空文件夹
File f2 = new File("d:\\admin");
f2.delete();
}
}
1.5 判断性
方法的名称 | 方法的描述 |
---|---|
public boolean exists() | 测试此抽象路径名表示的文件或目录是否存在 |
public boolean isDirectory() | 测试此抽象路径名表示的文件是否是一个目录 |
public boolean isFile() | 判断是否是文件 |
代码:
import java.io.File;
public class Test02 {
public static void main(String[] args) {
//构建一个文件对象
File f1 = new File("d:\\a\\b\\c\\d.txt");
System.out.println(f1.exists());
File f2 = new File("d:\\k.txt");
System.out.println(f2.exists());
File f3 = new File("d:\\a");
System.out.println(f3.exists());
File f4 = new File("d:\\ww");
System.out.println(f4.exists());
System.out.println("======================");
File f5 = new File("d:\\a\\b\\c");
System.out.println(f5.isDirectory());
File f6 = new File("d:\\a\\b\\c\\d.txt");
System.out.println(f6.isDirectory());
System.out.println("===================");
File f7 = new File("d:\\a\\b\\c");
System.out.println(f5.isFile());
File f8 = new File("d:\\a\\b\\c\\d.txt");
System.out.println(f6.isFile());
}
}
1.6 重命名与剪切
方法的名称 | 方法的描述 |
---|---|
public boolean renameTo(File dest) | 重命名(在同一个目录下重命名)或者是剪切(在不同的目录执行的是剪切) |
1.7 get方法
方法的名称 | 方法的描述 |
---|---|
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 获取的是File构方法中的路径 |
public String getParent() | 返回此抽象路径名父目录的路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
public long length() | 返回由此抽象路径名表示的文件的长度 |
1.8 过滤方法
方法的名称 | 方法的描述 |
---|---|
public String[] list() | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录(一级目录下) |
public String[] list(FilenameFilter filter) | 返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中满足指定过滤器的文件和目录 |
public File[] listFiles(FilenameFilter filter) | 返回抽象路径名数组,这些路径名表示此抽象路径名表示的目录中满足指定过滤器的文件和目录(返回的是文件对象的数组) |
代码-01:
import java.io.File;
public class Test09 {
public static void main(String[] args) {
//实例化File
File f1 = new File("D:\\admin");
String[] arrray = f1.list();
for (String s:arrray){
System.out.println(s);
}
}
}
代码-02:
import java.io.File;
import java.io.FilenameFilter;
import java.util.Arrays;
public class Test10 {
public static void main(String[] args) {
//实例化File对象
File f1 = new File("d:\\admin");
String [] arrays= f1.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
//File 表示的是上一级目录的文件对象
//name 表示当前文件名
// System.out.println(dir.getName());
// System.out.println(name);
//图片判断其后缀名
if (name.endsWith("jpg")||name.endsWith("png")||name.endsWith("gif")||name.endsWith("jpeg")){
return true;
}
return false;
}
});
System.out.println(Arrays.toString(arrays));
}
}
代码-03:
import java.io.File;
import java.io.FilenameFilter;
public class Test11 {
public static void main(String[] args) {
//实例化File对象
File f = new File("d:\\admin");
File [] arrays = f.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.endsWith("jpg")||name.endsWith("png")||name.endsWith("gif")||name.endsWith("jpeg")){
//true 表示存入到数组
return true;
}
// false 表示不存入到数组中
return false;
}
});
for (File f1:arrays){
System.out.println(f1.getName());
}
}
}
二、递归
2.1 简介
递归就是方法反复自己调用自己;方法在栈内存中开辟空间;可能会造成栈溢出
2.2 案例1
需求:删除一个文件夹下面的所有的文件 包括自身 采用递归的方式
分析:
1. 递归中方法的参数 文件对象File
2. istFile() 获取当前目录下所有文件以及目录
3. 使用循环遍历数组
判断是目录 继续递归
不是目录 删除 delete()
代码:
import java.io.File;
import java.io.FilenameFilter;
public class Test03 {
public static void main(String[] args) {
deleteFile(new File("d:\\hello"));
}
public static void deleteFile(File src){
//获取文件下所有的目录以及文件
File [] files= src.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return true;
}
});
//使用循环遍历
for (File f :files) {
if (f.isDirectory()){
// 递归调用
deleteFile(f);
}else{
//删除文件
f.delete();
}
}
//删除当前文件夹
src.delete();
}
}
2.3 案例2
在控制台下打印c盘中所有的图片 使用递归的方式
分析:
1. 使用递归进行操作
2. 是目录的时候需要递归
3. 过滤出所有的图片 判断其后缀名
代码:
import java.io.File;
public class Test04 {
public static void main(String[] args) {
showInfoImg(new File("C:\\Users\\Administrator\\Desktop\\第一阶段\\day18"));
}
public static void showInfoImg(File src){
//对文件进行非空验证
if (src !=null){
//判断是否是目录
if (src.isDirectory()){
//获取当前目录下所有的文件
File [] files = src.listFiles();
//对数组进行非空验证
if (files !=null && files.length >0) {
//遍历获取每一个文件
for (File f :files) {
//递归调用
showInfoImg(f);
//判断后缀名是否为图片的格式
if (f.getName().endsWith("png") || f.getName().endsWith("jpeg")||
f.getName().endsWith("gif")||f.getName().endsWith("jpg")){
System.out.println(f.getName());
}
}
}
}
}
}
}