File 类是 java.io 包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过 File 类来完成。值得指出的是,不管是文件还是目录都是使用 File 来操作的,File 能新建、删除、重命名文件和目录,File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。
File 类可以使用文件路径字符串来创建 File 实例,该文件路径字符串既可以是绝对路径,也可以是相对路径。在默认情况下,系统总是依据用户的工作路径来解释相对路径,这个路径由系统属性“user.dir”指定,通常也就是运行 Java 虚拟机时所在的路径。
一旦创建了 File 对象后,就可以调用 File 对象的方法来访问,File 类提供了很多方法来操作文件和目录,下面列出一些比较常用的方法。
1. 访问文件名相关的方法
2.文件检测相关的方法
3.获取常规文件信息
4.文件操作相关的方法
5. 目录操作相关的方法
上面详细列出了 File 类的常用方法,下面程序以几个简单方法来测试一下File 类的功能。
public class FileTest { public static void main(String[] args) throws IOException { // 以当前路径来创建一个File对象 File file = new File("."); // 直接获取文件名,输出一点 System.out.println(file.getName()); // 获取相对路径的父路径可能出错,下面代码输出null System.out.println(file.getParent()); // 获取绝对路径 System.out.println(file.getAbsoluteFile()); // 获取上一级路径 System.out.println(file.getAbsoluteFile().getParent()); // 在当前路径下创建一个临时文件 File tmpFile = File.createTempFile("aaa", ".txt", file); // 指定当JVM退出时删除该文件 tmpFile.deleteOnExit(); // 以系统当前时间作为新文件名来创建新文件 File newFile = new File(System.currentTimeMillis() + ""); System.out.println("newFile对象是否存在:" + newFile.exists()); // 以指定newFile对象来创建一个文件 newFile.createNewFile(); // 以newFile对象来创建一个目录,因为newFile已经存在, // 所以下面方法返回false,即无法创建该目录 newFile.mkdir(); // 使用list()方法来列出当前路径下的所有文件和路径 String[] fileList = file.list(); System.out.println("====当前路径下所有文件和路径如下===="); for (String fileName : fileList) { System.out.println(fileName); } // listRoots()静态方法列出所有的磁盘根路径。 File[] roots = File.listRoots(); System.out.println("====系统所有根路径如下===="); for (File root : roots) { System.out.println(root); } } }
运行上面程序,可以看到程序列出当前路径的所有文件和路径时,列出了程序创建的临时文件,但程序运行结束后,aaa.txt 临时文件并不存在,因为程序指定虚拟机退出时自动删除该文件。
上面程序还有一点需要注意,当使用相对路径的 File 对象来获取父路径时可能引起错误,因为该方法返回将 File 对象所对应的目录名、文件名里最后一个子目录名、子文件名删除后的结果,如上面程序中的粗体字代码所示。
注意:Windows 的路径分隔符使用反斜线(\),而Java程序中的反斜线表示转义字符,所以如果需要在 Windows 的路径下包括反斜线,则应该使用两条反斜线,如 F:\\abc\\test.txt,或者直接使用(/)也可以,Java 程序支持将斜线当成平台无关的路径分隔符。
在 File 类的 list() 方法中可以接收一个参数,通过该参数可以只列出符合条件的文件。
FilenameFilter 接口里包含了一个 accept(File dir,String name)方法,该方法将依次对指定 File 的所有子目录或者文件进行迭代,如果该方法返回 true,则 list() 方法会列出该子目录或者文件。
public class FilenameFilterTest { public static void main(String[] args) { File file = new File("."); // 使用Lambda表达式(目标类型为FilenameFilter)实现文件过滤器。 // 如果文件名以.java结尾,或者文件对应一个路径,返回true String[] nameList = file.list((dir, name) -> name.endsWith(".java") || new File(name).isDirectory()); for (String name : nameList) { System.out.println(name); } } }
上面程序中的粗体字代码部分实现了 accept() 方法,实现 accept() 方法就是指定自己的规则,指定哪些文件应该由 list() 方法列出。
运行上面程序,将看到当前路径下所有的 *.java 文件以及文件夹被列出。
提示:FilenameFilter 接口内只有一个抽象方法,因此该接口也是一个函数式接口,可使用 Lambda 表达式创建实现该接口的对象。
原文:https://www.cnblogs.com/jwen1994/p/12237001.html