JAVA File类
什么是File类?
File类是java.io包下的一个类,可以用来操作文件和目录,比如新建,删除,重命名文件或文件夹,读取文件或文件夹的基本信息(文件最后修改时间等等),但是File不能访问文件内容,必须用IO流才可以访问或修改文件内容.
正式开始之前,先做一个名称的约定
File类的构造方法
重点:
1.File对象的路径只是一个路径的映射(抽象路径),并不是真的有对应的文件夹和文件了,文件夹和文件必须要用File对象调用方法生成才行.
2.如果pathname没有写绝对路径(比如"C:/test/readme.txt"),而是相对路径("test/readme.txt"),那么File的路径就会映射到项目的根目录下.
3.创建对象时,路径分隔符用正斜杠(/)或者反斜杠(\\)都可以,会自动换成反斜杠(\)的,不能直接在代码中写反斜杠(\)! tips:Java中\\等于\,因为是转义符啦~~~
public File(String pathname) : 传入抽象路径,生成一个File对象 例如:pathname="C:/test/readme.txt"
public File(String parent, String child) : 例:parent="C:/test/", child="readme.txt"; parent不能指定到文件,只能到文件夹
public File(File parent, String child) : 类似上边的
public File(URI uri) : 传入URI,生成File对象,什么是URI : 可以用File对象的toURI()方法生成一个URI自己看看
随便举个例子
File file = new File("C:/test/readme.txt");
//创建File对象时并不会生成对应路径的目录和文件(夹).
各种get方法
public String getName() : 获取文件名(即 '文件(夹)')
public String getParent() : 获取目录(原路径去除掉getName()的值)
public File getParentFile() : 获取以getParent()为路径的File对象
public String getPath() : 原样获取File对象的路径(写什么返回什么)
public String getAbsolutePath() : 返回绝对路径
public String getCanonicalPath() : 返回绝对路径的同时,简化路径名(去除掉./或者../这种类型的路径, 不明白的话看下边示例)
public File getAbsoluteFile() : 获取以getAbsolutePath()为路径的File对象
public File getCanonicalFile() : 获取以getCanonicalPath()为路径的File对象
File file = new File("aaa/bbb/ccc/ddd/.././abc.txt"); file.getParentFile().mkdirs(); //创建abc.txt父级的目录 file.createNewFile(); //创建abc.txt文件 System.out.println(file.getName()); //abc.txt System.out.println(file.getParent()); //aaa\bbb\ccc\ddd\..\. System.out.println(file.getParentFile()); //aaa\bbb\ccc\ddd\..\. System.out.println(file.getPath()); //aaa\bbb\ccc\ddd\..\.\abc.txt System.out.println(file.getAbsolutePath()); //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\ddd\..\.\abc.txt System.out.println(file.getCanonicalPath()); //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\abc.txt System.out.println(file.getAbsoluteFile()); //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\ddd\..\.\abc.txt System.out.println(file.getCanonicalFile()); //C:\Users\jyhes\eclipse-workspace\family\aaa\bbb\ccc\abc.txt //File重写了toString()方法,所以打印file对象时是打印file的路径
//注意,file对象的路径用的是正斜杠,而打印出来的是反斜杠,因为windows路径是用反斜杠分隔的,
判断相关方法
public boolean isAbsolute()
public boolean isDirectory()
public boolean isFile()
public boolean isHidden()
不做赘述
增删改相关方法
重点
1.mkdir()和mkdirs()不会识别文件后缀,统统创建成文件夹!
2.createNewFile()不管有没有后缀,统统创建成文件!
3.delete()删除文件夹时如果文件夹内有文件或文件夹,则不能删除
4.对于所有增删改方法,操作的都是路径中的文件(夹),比如 "C:/aaa/bbb/ccc.txt",ccc.txt前边的统统算作是目录!
public boolean mkdir() : 按照路径(path)创建文件夹("C:/aaa/bbb/abc.txt" 如果aaa或bbb目录不存在,则方法不起作用,如aaa,bbb都存在,才能创建abc.txt文件夹)
public boolean mkdirs() : 按照路径(path)创建文件夹("C:/aaa/bbb/ccc/abc.txt" 不管aaa, bbb, ccc文件夹是否存在,都按照路径正常创建文件夹,缺少的文件夹都会一并创建)
public boolean createNewFile() : 创建路径中的文件,如果目录不存在,则报错找不到指定路径
public boolean delete() : 删除文件(夹) (删除文件:直接删除 删除文件夹:如果文件夹下有文件或文件夹,则方法不起作用)
public void deleteOnExit() : 程序退出时再删除
public boolean renameTo(File dest) : 把文件(夹)重命名成dest路径中文件(夹)的名字,如果是不同目录的路径,则不起作用.
List方法
public String[] list() : 把路径下所有的文件或文件夹的名字做成String数组并返回
public String[] list(FilenameFilter filter) : 跟list()方法相同,但只取FilenameFilter过滤后的内容
public File[] listFiles() : 用路径下所有的文件或文件夹的路径,做成一个File数组,并返回
public File[] listFiles(FilenameFilter filter) : 跟listFiles()方法相同,但只取FilenameFilter过滤后的内容
public File[] listFiles(FileFilter filter) : 跟listFiles()方法相同,但只取FileFilter过滤后的内容
FileFilter 和FilenameFilter是函数式接口,可以用Lambda表达式
其他方法
public URI toURI()
设置是否可读,可执行,可写入,最近修改时间等方法省略...
递归清空文件夹
//先在C:/test/目录下创建好多个文件夹和文件 File deleteFile = new File("c:/test/"); @Test public void fileDelete() { deleteAllFiles(deleteFile); return; } public void deleteAllFiles(File file) { File[] listFiles = file.listFiles(); for (int i = 0; i < listFiles.length; i++) { if(listFiles[i].isDirectory()) { deleteAllFiles(listFiles[i]); } listFiles[i].delete(); } }
f