java核心学习(十一) IO框架---File类
一、File类
File类位于java.io包下,代表与平台无关的文件和目录,可以新建、删除、重命名文件和目录,也可以访问文件的某些属性,但是不可以完成文件读写
下面编写一段例子代码来体会File类的用法。
package IOTest; import java.io.File; import java.io.IOException; public class FileTest { public static void main(String[] args) throws IOException{ //以当前路径来创建一个File对象 File file = new File("."); //直接获取文件名 System.out.println(file.getName()); //获取相对路径的父路径 System.out.println(file.getParent()); //获取绝对路径 System.out.println(file.getAbsolutePath()); //获取上一级路径 System.out.println(file.getAbsoluteFile().getParent()); //在当前路径下创建一个临时文件 File temFile = File.createTempFile("FileTest",".txt",file); //指定当JVM退出时删除该文件 temFile.deleteOnExit(); //以系统当前时间作为新文件名来创建新文件 File newFile = new File(System.currentTimeMillis()+""); //以指定的newFile对象来创建一个文件 System.out.println("newFile对象是否存在:"+(newFile.exists()?"存在":"不存在")); newFile.createNewFile(); System.out.println("newFile对象是否存在:"+(newFile.exists()?"存在":"不存在")); //以newFile对象来创建一个目录,因为newFile已存在,所以下面方法返回false System.out.println(newFile.mkdir()); //使用list()方法列出当前路径下的所有文件和路径 String[] fileList = file.list(); for (String s:fileList ) { System.out.println(s); } //listRoots()静态方法列出所有的磁盘根路径 File[] roots = File.listRoots(); for (File root: roots ) { System.out.println(root); } } }
. null E:\app\talkroom2\WhhTalkRoom_server\. E:\app\talkroom2\WhhTalkRoom_server newFile对象是否存在:不存在 newFile对象是否存在:存在 false .idea 1505285884856 FileTest8400817717936644656.txt pom.xml src target WhhTalkRoom_server.iml C:\ D:\ E:\ F:\ Process finished with exit code 0
可以看到File类对于访问文件系统已经提供了很多的方法了,但是相比于我们直接在linux系统里使用命令操作文件系统还是有很大的差距,不过若真的使用命来代替文件访问,可以使用Runtime类的exec方法,具体用到的时候可以查看文档和工具书。不过现在一般会使用NIO.2 的Files和Path和Paths类来全面的访问文件和文件系统
二、文件过滤器
FilenameFilter接口是一个函数式接口,File类的list()方法可以接受一个实现FilenameFilter接口的类的实例来作为参数
package IOTest; import java.io.File; import java.io.FilenameFilter; public class FilenameFilterTest { public static void main(String[] args){ File file = new File("."); String[] nameList = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { //文件已java为后缀,或者是一个目录则返回true,它的用法只需要传入根据name和dir的过滤条件。(命令模式的典型例子) return name.endsWith(".java") || new File(name).isDirectory(); } }); for (String name :nameList ) { System.out.println(name); } } }
输出
.idea
src
target
Process finished with exit code 0