Java File类方法使用详解
cka
在操作文件之前必须创建一个指向文件的链接或者实例化一个文件对象,也可以指定一个不存在的文件从而创建它。
File对象代表磁盘中实际存在的文件和目录。
Java 中的 File 类是文件和目录路径名的抽象形式。使用 File 类可以获取文件本身的一些信息,例如文件所在的目录、文件长度、文件读写权限等,还可用于文件和目录的创建、文件的查找和文件的删除等
File 类简介
在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与平台无关的方法来操作文件,File类主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。
File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。
File类提供了如下三种形式构造方法。
- File(File parent,String child):根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
File f4 = new File("C:\\Users\\Administrator\\Desktop\\");
或者File f4 = new File("C:\\Users\\Administrator\\Desktop");
或者File f4 = new File("C:/Users/Administrator/Desktop/");
File f5 = new File(f4, "FileWord.txt");
- File(String pathname):通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。如果给定字符串是空字符串,则结果是空的抽象路径名。
File f2 = new File("C:\\Users\\Administrator\\Desktop\\FileWord.txt");
或者:File f2 = new File("C:/Users/Administrator/Desktop/FileWord.txt");
- File(String parent,String child):根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
File f3 = new File("C:\\Users\\Administrator\\Desktop\\", "FileWord.txt");
或者File f3 = new File("C:/Users/Administrator/Desktop/", "FileWord.txt");
注意:\ 单反斜杠在java中有特殊含义,所以需要变成\\双斜杆。
使用任意一个构造方法都可以创建一个 File 对象,然后调用其提供的方法对文件进行操作。在表 1 中列出了 File 类的常用方法及说明。
方法名称 | 说明 |
---|---|
boolean canRead() | 测试应用程序是否能从指定的文件中进行读取 |
boolean canWrite() | 测试应用程序是否能写当前文件 |
boolean delete() | 删除当前对象指定的文件 . |
boolean exists() | 测试当前 File 是否存在 |
String getAbsolutePath() | 返回由该对象表示的文件的绝对路径名 |
String getName() | 返回表示当前对象的文件名 |
String getParent() | 返回当前 File 对象路径名的父路径名,如果此名没有父路径则为 null |
boolean isAbsolute() | 测试当前 File 对象表示的文件是否为一个绝对路径名 |
boolean isDirectory() | 测试当前 File 对象表示的文件是否为一个路径 |
boolean isFile() | 测试当前 File 对象表示的文件是否为一个“普通”文件 |
long lastModified() | 返回当前 File 对象表示的文件最后修改的时间 |
long length() | 返回当前 File 对象表示的文件长度 |
String[] list() | 返回当前 File 对象指定的路径文件列表 |
String[] list(FilenameFilter) | 返回当前 File 对象指定的目录中满足指定过滤器的文件列表 |
boolean mkdir() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean mkdirs() | 创建一个目录,它的路径名由当前 File 对象指定 |
boolean renameTo(File) | 将当前 File 对象指定的文件更名为给定参数 File 指定的路径名 |
注意:假设在 Windows 操作系统中有一文件 D:\javaspace\hello.java
,在 Java 中使用的时候,其路径的写法应该为 D:/javaspace/hello.java
或者 D:\\javaspace\\hello.java
。
以下是java测试:
项目结构:
java代码:
package FileDemo; import java.io.File; import java.io.FilenameFilter; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; public class FileAction{ public static void main(String[] args) { // TODO Auto-generated method stub //file 操作文件 File f1 = new File("src/FileWord.txt"); System.out.println("得到f1的绝对路径:"+f1.getAbsolutePath()); File f2 = new File("C:\\Users\\Administrator\\Desktop\\FileWord.txt"); File f3 = new File("C:\\Users\\Administrator\\Desktop\\", "FileWord.txt"); File f4 = new File("C:\\Users\\Administrator\\Desktop\\"); File f5 = new File(f4, "FileWord.txt"); System.out.println("得到f2的绝对路径:"+f2.getAbsolutePath());// getAbsolutePath() 得到文件的绝对路径,即使文件位于项目中,得到的也是文件的绝对路径 System.out.println("得到f3的绝对路径:"+f3.getAbsolutePath()); System.out.println("得到f5的绝对路径:"+f5.getAbsolutePath()); System.out.println(f2==f3); System.out.println(f2.equals(f5)); Date d = new Date(f2.lastModified()); SimpleDateFormat s = new SimpleDateFormat("yyyy-dd-MM hh:mm:ss"); System.out.println("得到文件最后的修改时间:"+s.format(d));// lastModified() 得到文件最后的修改时间 System.out.println("判断文件是否存在:"+f2.exists()); // exists() 判断文件是否存在 如果文件不存在,返回false,文件的修改时间为1970-01-01 08:00:00为计算机出现时间 System.out.println("得到文件的长度,单位是字节:"+f2.length()); // length() 得到文件的长度,单位是字节 System.out.println("判断文件是否隐藏:"+f2.isHidden());// isHidden() 判断文件是否隐藏 System.out.println(f2.getName());// getName() 得到文件的名字,只有名字,不包括文件路径 System.out.println(f2.getPath());// getPath() 得到文件的路径,当文件位于项目中时,得到的是相对路径,当文件位于项目外时,得到的是绝对路径 System.out.println(f2.getParent());// getParent() 得到文件的父级目录,当文件位于项目中时,返回项目中的父级目录,当文件位于项目外时,得到文件的父级目录 System.out.println(f1.delete()); // delete() 删除文件 当文件原本存在时,删除文件,返回true,当文件原本就不存在时,返回false System.out.println(f2.canRead()); //canRead() 是否可读 System.out.println(f2.canWrite()); // canWrite() 是否可写 System.out.println(f2.isDirectory()); // isDirectory() 是否是目录 true:是,false:不是 System.out.println(f2.isFile()); // isFile() 是否是文件 true:是,false:不是 System.out.println(f2.isAbsolute()); //isAbsolute() File f6 = new File("C:\\MyFileWord.txt"); //先判断文件是否存在,exists() true:存在,false:不存在,getAbsolutePath()获得文件的绝对路径,delete() 删除文件,createNewFile()文件不存在时,创建文件 if(f6.exists()){ System.out.println("获得f6的绝对路径:"+f6.getAbsolutePath()); f6.delete(); }else{ try { f6.createNewFile();//createNewFile() 文件不存在时,创建文件 System.out.println("f6创建文件成功:"+f6.getAbsolutePath()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } // file操作目录 //先判断目录是否存在,exists() true:存在,false:不存在,getAbsolutePath()获得目录的绝对路径,delete() 删除目录,mkdir()创建目录 File f7 = new File("C:\\FileDemo"); if(f7.exists()){ System.out.println("目录存在:"+f7.getAbsolutePath()); f7.delete(); }else{ f7.mkdir(); System.out.println("目录不存在存在,新建目录:"+f7.getAbsolutePath()); } //遍历目录 //通过遍历目录可以在指定的目录中查找文件,或者显示所有的文件列表。File类的 list() 方法提供遍历目录的功能 File f8 = new File("C:\\FileDemo"); String[] filelist=f8.list();//调用无参的list()方法,返回String[]数组 //遍历返回的数组 for (int i = 0; i < filelist.length; i++) { // filelist[i] 只会返回该目录下文件或者文件夹的名字 System.out.println(filelist[i]); //如果需要获得文件的其他属性,需要先转换成File对象,根据其上级目录的位置,再调用其它属性方法,如下 System.out.println("文件的绝对路径:"+new File("C:\\FileDemo",filelist[i]).getAbsolutePath()); System.out.println("是否是文件:"+new File("C:\\FileDemo",filelist[i]).isFile()); System.out.println("是否是目录:"+new File("C:\\FileDemo",filelist[i]).isDirectory()); } System.out.println("**************************************"); //如果希望列出目录下的某些文件,就需要调用带有过滤器参数的list()方法,首先需要创建文件过滤器,该过滤器必须实现java.io.FilenameFilter接口,并在accept()方法中指定允许的文件类型 File f9 = new File("C:\\FileDemo"); //实现java.io.FilenameFilter接口,并在accept()方法中指定允许的文件类型 String[] filelist1=f9.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // TODO Auto-generated method stub //允许的txt,docx的文件类型 return name.endsWith(".txt") || name.endsWith(".docx"); } }); //遍历返回的数组 for (int i = 0; i < filelist1.length; i++) { // filelist[i] 只会返回该目录下文件或者文件夹的名字 System.out.println(filelist1[i]); //如果需要获得文件的其他属性,需要先转换成File对象,根据其上级目录的位置,再调用其它属性方法,如下 System.out.println("文件的绝对路径:"+new File("C:\\FileDemo",filelist1[i]).getAbsolutePath()); System.out.println("是否是文件:"+new File("C:\\FileDemo",filelist1[i]).isFile()); System.out.println("是否是目录:"+new File("C:\\FileDemo",filelist1[i]).isDirectory()); } } }
C:\\FileDemo 的文件结构:
控制台输出打印:
得到f1的绝对路径:E:\workplace_mslocationserver_xin\FileServer\src\FileWord.txt
得到f2的绝对路径:C:\Users\Administrator\Desktop\FileWord.txt
得到f3的绝对路径:C:\Users\Administrator\Desktop\FileWord.txt
得到f5的绝对路径:C:\Users\Administrator\Desktop\FileWord.txt
false
true
得到文件最后的修改时间:2019-06-06 09:52:23
判断文件是否存在:true
得到文件的长度,单位是字节:6
判断文件是否隐藏:false
FileWord.txt
C:\Users\Administrator\Desktop\FileWord.txt
C:\Users\Administrator\Desktop
false
true
true
false
true
true
获得f6的绝对路径:C:\MyFileWord.txt
目录存在:C:\FileDemo
filea
文件的绝对路径:C:\FileDemo\filea
是否是文件:false
是否是目录:true
fileb.txt
文件的绝对路径:C:\FileDemo\fileb.txt
是否是文件:true
是否是目录:false
filec.docx
文件的绝对路径:C:\FileDemo\filec.docx
是否是文件:true
是否是目录:false
**************************************
fileb.txt
文件的绝对路径:C:\FileDemo\fileb.txt
是否是文件:true
是否是目录:false
filec.docx
文件的绝对路径:C:\FileDemo\filec.docx
是否是文件:true
是否是目录:false