File类
File类的常用方法
Filie类常用的构造方法
File(String pathname) //通过指定的一个字符串类型的文件路径来创建一个新的File对象
File(String parent,String child) //通过指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
File(File parent,String child) //根据指定的File类的父路径和字符串类型的子路径(包括文件的名称)创建一个File对象
File类常用的方法,如下代码:
package com.Put;
import java.io.*;
public class IO {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("example.txt");
System.out.println("文件的名称:"+file.getName());
System.out.println("文件的相对路径:"+file.getPath());
System.out.println("文件的绝对路径:"+file.getAbsolutePath());
System.out.println("文件的父路径:"+file.getParent());
System.out.println(file.canRead() ? "文件可读" : "文件不可读");
System.out.println(file.canWrite() ? "文件可写" : "文件不可写");
System.out.println(file.isFile() ? "是一个文件" : "不是一个文件");
System.out.println(file.isDirectory() ? "是一个目录" : "不是一个目录");
System.out.println(file.isAbsolute() ? "是绝对路径" : "不是绝对路径");
System.out.println("最后修改时间为:"+file.lastModified());
System.out.println("文件大小为:"+file.length()+"byte");
}
}
运行结果为:
文件的名称:example.txt
文件的相对路径:example.txt
文件的绝对路径:E:\Idea\JavaSE\example.txt
文件的父路径:null
文件可读
文件可写
是一个文件
不是一个目录
不是绝对路径
最后修改时间为:1628167368489
文件大小为:4byte
遍历目录下的文件
- File类中有一个list()方法,用于遍历某个指定目录下的所有文件的名称,代码如下:
package com.Put;
import java.io.*;
import java.util.Arrays;
public class IO {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("E:\\Idea\\JavaSE\\重新学习");
//判断是否时目录
if (file.isDirectory()){
//获取目录下的所有文件的名称
String[] fileNames = file.list();
//对指定路径下的文件或目录进行遍历
Arrays.stream(fileNames).forEach(f -> System.out.println(f));
}
}
}
效果展示:
简述:最后通过数组工具类Arrays的stream()方法将数组先转换为Stream流并进行遍历,依次打印出每个文件的文件名
获取指定路径下的文件:
File类提供了一个重载的list(FilenameFilter filter)方法,该方法接收一个FilenameFilter接口类型的参数。FilenameFilter是一个函数式接口,被称作文件过滤器,接口中定义了一个抽象方法accept(File dir,String name)用于依次对指定的File的所有子目录或文件进行迭代。在调用list(FilenameFilter filter)方法时,需要实现过滤器FilenameFilter,并在accept(File dir,String name)方法中进行筛选,从而获得指定类型的文件
package com.Put;
import java.io.*;
import java.util.Arrays;
public class IO {
public static void main(String[] args) throws Exception{
//创建File对象
File file = new File("E:\\Idea\\JavaSE\\重新学习\\src");
//File file = new File("E:\\Idea\\JavaSE\\重新学习\\src\\com\\Demo01");
//判断是否时目录
if (file.isDirectory()){
//获取目录下的所有文件的名称
String[] fileNames = file.list(((dir, name) -> name.endsWith(".txt")));
//String[] fileNames = file.list(((dir, name) -> name.endsWith(".java")));
//对指定路径下的文件或目录进行遍历
Arrays.stream(fileNames).forEach(f -> System.out.println(f));
}
}
}
运行结果:
简述:
调用list(FilenameFilter filter)方法时传入了一个lambda表达式形式的参数,该参数实现了函数式接口filenameFilter中的accept(File dir,String name)方法,然后数组工具类Arrays的stream()方法将数组先转换为Stream流并进行遍历
listFiles()方法返回一个File对象的数组,当对数组中的元素进行遍历时,如果元素中有子文件需要遍历,则可以使用"“递归”"再次遍历子目录
代码如下:
package com.Put;
import java.io.*;
public class IO {
public static void main(String[] args) throws Exception {
//创建File对象
File file = new File("E:\\Idea\\JavaSE\\重新学习");
//调用fileDir方法,遍历目录
fileDir(file);
}
//遍历目录及其子目录
public static void fileDir(File file){
//获取目录下所有的文件,并赋给数组
File[] listFiles = file.listFiles();
//循环遍历数组
for (File files:
listFiles) {
//如果遍历的时目录,则递归调用fileDir()方法
if (files.isDirectory()){
fileDir(files);
}
//输出文件的路径
System.out.println(files);
}
}
}
简述:
定义了一个静态方法fileDir()用于接收一个目录下的File对象。在方法中,首先通过调用listFiles()方法把该目录下所有子文件和文件存到一个File类型的数组listFiles中,接着遍历数组listFiles,并对当前遍历的File对象进行判断,如果是目录就递归调用fileDir()方法进行子目录遍历,如果是文件就直接打印输出文件的路径,这样该目录下的所有子文件就被成功遍历出来了
删除文件及目录
不要尝试,跟遍历目录下的文件原理差不多,了解即可
package com.Put;
import java.io.*;
public class IO {
public static void main(String[] args) throws Exception {
//创建File对象
File files = new File("E:\\Idea\\JavaSE\\重新学习");
//调用deleteDir方法
deleteDir(files);
}
//删除方法
public static void deleteDir(File files){
//获取File对象中所有的文件,并赋给数组
File[] listFiles = files.listFiles();
//循环遍历数组
for (File file:
listFiles) {
//如果遍历的时目录,则递归调用deleteDir方法
if (files.isDirectory()){
deleteDir(file);
}
//如果是文件,则删除
file.delete();
}
//删除文件夹内的所有文件后,再删除文件夹
files.delete();
}
}