File类 - 概述
File 类的实例是文件或目录的路径名的抽象表示形式。Java虚拟机中的一个File
实例表示一个路径名 。
比如,磁盘上 D:/malajava 目录名称为 阿凡达.mp4 的视频文件,它与JVM中File实例的关系如下图所示:
- 一个
File
实例所表示的路径可能是个一个文件,也可能是一个目录。 - 一个
File
实例所表示的路径名
可能在磁盘上是存在的,也可能在磁盘上根本就不存在;
File类提供了用于操作文件或目录的方法,但并不支持访问文件的内容。
File类 - 用法
File类 常量
File 类提供了 4 个表示分隔符的常量:
不同的系统平台下,这四个常量的取值也不相同:
- 在Windows 平台下
- pathSeparator 和 pathSeparatorChar 对应的是
;
- separator 和 separatorChar 对应的是
\
- pathSeparator 和 pathSeparatorChar 对应的是
- Unix / Linux / OS X 平台下
- pathSeparator 和 pathSeparatorChar 对应的是
:
- separator 和 separatorChar 对应的是
/
- pathSeparator 和 pathSeparatorChar 对应的是
separator 和 separatorChar 表示的是文件系统中路径的不同部分之间的分隔符;而 pathSeparator 和 pathSeparatorChar 则表示环境变量中 Path
变量值中不同部分的分隔符。
注意:在操作文件时一定要使用 File.separator 表示分隔符。在程序的开发中,往往会使用 Windows 开发环境,因为在 Windows 操作系统中支持的开发工具较多,使用方便,而在程序发布时往往是直接在 Linux 或其它操作系统上部署,所以这时如果不使用 File.separator,则程序运行就有可能存在问题。关于这一点我们在以后的开发中一定要有所警惕。
File类 构造方法
File 类提供了 4 个构造方法用于创建File实例:
举例:
File first = new File( "D:/malajava/阿凡达.mp4" );
System.out.println( first ); // D:/malajava/阿凡达.mp4
File second = new File( "D:/malajava" , "阿凡达.mp4" );
System.out.println( second ); // D:/malajava/阿凡达.mp4
File third = new File( "D:/malajava" );
System.out.println( third ); // D:/malajava
File fourth = new File( third , "阿凡达.mp4" );
System.out.println( fourth ); // D:/malajava/阿凡达.mp4
File类 文件属性
1)判断文件目录是否存在
public boolean exists();
2)判断是否为文件
public boolean isFile();
判断是否为目录
public boolean isDirectory();
3)判断是否为隐藏文件
public boolean isHidden();
4)判断是否为绝对路径
public boolean isAbsolute();
5)获取路径及名称
public String getName(); //获取最短的那个文件或者文件夹名称
public String getPath(); //获取相对路径,构造方法中传入的那个字符串
public String getAbsolutePath(); //获取绝对路径
public String getParent(); //获取父路径
6)获取访问时间
File类提供了获取文件或目录最后修改时间(以毫秒计)的方法:
public long lastModified();
7)获取文件长度
方法所返回的文件长度以字节为单位。如果File实例所表示的路径名
是一个目录,则返回值是不确定的;如果File实例所表示的路径名
在磁盘上是不存在,则返回 0L
。
public long length();
8)获取文件权限
文件或目录的权限
- 读取权限
- 修改权限 ( 也叫写权限 )
- 执行权限 ```java public boolean canRead();
public boolean canWrite();
public boolean canExecute();
9)遍历文件夹下的目录或文件
```java
public String[] list();//返回文件夹中的所有内容的名称(不包含子文件夹中的内容)
public File[] listFiles(); //返回文件夹中的所有内容的File对象(不包含子文件夹中的内容)
注意事项:这两个方法只能针对文件夹使用,不能针对文件使用
获取文件夹下所有.java文件
在 java.io
包中提供了用于对文件或目录进行过滤的接口:
java.io.FilenameFilter
java.io.FileFilter
结合File类提供的方法可以实现对文件或目录的过滤:
public static void getAll(File file){
//文件夹为空返回
if(file== null){
return ;
}
//过滤掉非.java文件。保留文件夹和.java文件
File[] list=file.listFiles(new FileFilter(){
@Override
public boolean accept(File file) {
if(file.isDirectory()){
return true;
}
if(file.getName().endsWith(".java")){
return true;
}
return false;
}});
for(File f:list){
if(f.isFile()){
System.out.println(f.getName());
}else{
getAll(f);
}
}
}
File类 创建/删除
1)创建目录
在已经存在的目录中创建单个子目录;使用该方法创建目录时,必须保证新目录的父目录是存在的,并且当前操作系统用户对该目录拥有写权限。
public boolean mkdir();
2)创建多级目录
当被创建目录的父目录不存在时,可以通过该方法来先创建父目录后再创建子目录。
public boolean mkdirs();
3)创建文件
public boolean createNewFile() throws IOException
4)文件重命名
- File类型的参数表示
新文件名称
对应的路径 - 当且仅当重命名成功时,返回
true
;否则返回false
5)删除文件/目录public boolean renameTo( File destination );
删除指定File实例所表示public boolean delete();
路径名
对应的文件或目录;当且仅当成功删除文件或目录时,返回true,
否则返回false
。删除实例对象代表目录时,必须目录下为空才可以删除。
- 当
JVM
终止时再删除指定File实例所表示路径对应的文件或目录public void deleteOnExit();