当前位置: 首页 > news >正文

【Java-----File类详解】

File类概述

Java.io.File类是文件和文件目录路径的抽象表示形式,与平台无关。文件和目录是可以通过File封装成对象的,对于File而言,其封装的并不是一个真实存在的文件,仅仅是一个路径名而已,它可以是存在的,也可以是不存在的,将来是要通过具体的操作把这个路径的内容转换为具体存在的。想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。

File类中涉及到关于文件或文件目录的创建,删除,重命名,修改时间,文件大小等方法,并未涉及到写入或读取文件内容的操作,如果需要读取或写入文件内容,必须使用IO流来完成。File对象可以作为参数传递给流的构造器,指明读取或写入的终点。

构造方法

public File(String pathname):以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。示例代码如下:

File file1=new File("hello.txt");
File file2=new File("D:\\java\\javatest.txt");
System.out.println(file1);
System.out.println(file2);
/*输出:hello.txt
        D:\java\javatest.txt
*/

public File(String parent,String child):以parent为父路径,child为子路径创建File对象。示例代码如下:

File file3=new File("D:\\java","hellojava");
System.out.println(file3);
//输出:D:\java\hellojava

public File(File parent,String child):根据一个父File对象和子文件路径创建File对象。示例代码如下:

File file4=new File(file3,"hello.txt");
System.out.println(file4);
//输出:D:\java\hellojava\hello.txt

File类使用的注意事项

1  绝对路径和相对路径

  • 绝对路径:是一个固定的路径,从盘符开始,是一个完整的路径
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用

2  路径分隔符

  • 路径中的每级目录之间用一个路径分隔符隔开
  • 路径分隔符和系统有关:windows和DOS系统默认使用"\"来表示,UNIX和URL使用"/"来表示,linux使用"//"来表示
  • Java程序支持跨平台运行,因此路径分隔符要慎用,为了解决这个隐患,File类提供了一个常量:public static final String separator根据操作系统动态的提供分隔符
File file5=new File("D:"+File.separator+"1024");
System.out.println(file5);
File file6=new File("D:\\1024");
System.out.println(file6);
File file7=new File("D:/1024");
System.out.println(file7);
/*输出:D:\1024
        D:\1024
        D:\1024
*/

静态成员变量

  • public static final String pathSeparator:系统中多个路径的分隔符
  • public static final String separator:系统中一个路径中多个名称之间的分隔符

常用方法

获取功能

public String getAbsolutePath():获取绝对路径

File file1=new File("hello.txt");
System.out.println(file1.getAbsolutePath());
//输出:E:\Java workplace\22-6-13\hello.txt

public String getPath():获取路径

File file1=new File("hello.txt");
System.out.println(file1.getPath());
//输出:hello.txt

public String getName():获取名称

File file2=new File("D:\\java\\javatest.txt");
System.out.println(file2.getName());
//输出:javatest.txt

public String getParent():获取上层文件目录路径,若无则返回null

File file2=new File("D:\\java\\javatest.txt");
System.out.println(file2.getParent());
//输出:D:\java

public long length():获取文件长度(即:字节数),不能获取目录的长度

File file2=new File("D:\\java\\javatest.txt");
System.out.println(file2.length());
//输出:0

public long lastModified():获取最后一次的修改时间,毫秒值

File file2=new File("D:\\java\\javatest.txt");
System.out.println(file2.lastModified());
//输出:0

public String[] list():获取指定目录下的所有文件或者文件目录的字符串数组

File file2=new File("D:\\aaa");
String[] list=file2.list();
for(String s:list) {
	System.out.println(s);
}
/*输出:helloworld.txt
        java
*/

public File[] listFiles():获取指定目录下的所有文件或者文件目录的File对象数组

File file2=new File("D:\\aaa");
File[] list=file2.listFiles();
for(File f:list) {
	System.out.println(f);
}
/*输出:D:\aaa\helloworld.txt
        D:\aaa\java
*/

重命名功能

public boolean renameTo(File dest):把文件重命名为指定的文件路径

File file1=new File("D:\\aaa\\hello.txt");
File file3=new File("D:\\aaa","hellojava.txt");
System.out.println(file1.renameTo(file3));
//输出:false

判断功能

public boolean isDirectory():判断是否是文件目录

File file1=new File("hello.txt");
File file2=new File("D:\\aaa");
System.out.println(file1.isDirectory());
System.out.println(file2.isDirectory());
/*输出:false
        true
*/

public boolean isFile():判断是否是文件

File file1=new File("hello.txt");
File file2=new File("D:\\aaa\\hellojava.txt");
System.out.println(file1.isFile());
System.out.println(file2.isFile());
/*输出:false
        true
*/

public boolean exists():判断是否存在

File file1=new File("hello.txt");
File file2=new File("D:\\aaa\\hellojava.txt");
System.out.println(file1.exists());
System.out.println(file2.exists());
/*输出:false
        true
*/

public boolean canRead():判断是否可读

File file1=new File("hello.txt");
File file2=new File("D:\\aaa\\hellojava.txt");
System.out.println(file1.canRead());
System.out.println(file2.canRead());
/*输出:false
        true
*/

public boolean canWrite():判断是否可写

File file1=new File("hello.txt");
File file2=new File("D:\\aaa\\hellojava.txt");
System.out.println(file1.canWrite());
System.out.println(file2.canWrite());
/*输出:false
        true
*/

public boolean isHidden():判断是否隐藏

File file1=new File("hello.txt");
File file2=new File("D:\\aaa\\hellojava.txt");
System.out.println(file1.isHidden());
System.out.println(file2.isHidden());
/*输出:false
        false
*/

创建功能

public boolean createNewFile():创建文件,若文件存在,则不创建,返回false

File file1=new File("D:\\aaa\\hellojava.txt");//D盘中已有该文件
File file2=new File("D:\\aaa\\helloworld.txt");
if(!file1.exists()) {
	try {
		boolean flag1=file1.createNewFile();
		System.out.println(flag1?"创建成功":"创建失败");
	} catch (IOException e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}
				
}else {
	boolean flag2=file1.delete();
	System.out.println(flag2?"删除成功":"删除失败");
}
if(!file2.exists()) {
	try {
		boolean flag3=file1.createNewFile();
		System.out.println(flag3?"创建成功":"创建失败");
	} catch (IOException e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}
				
}else {
	boolean flag4=file1.delete();
	System.out.println(flag4?"删除成功":"删除失败");
}
/*输出:删除成功
        创建成功
*/

public boolean mkdir():创建文件目录,如果此文件目录存在,就不创建了,如果此目录文件的上层目录不存在,也不创建

File file1=new File("D:\\aaa");//已存在
File file2=new File("D:\\bbb");//不存在
File file3=new File("D:\\ccc\\java");//不存在,且上层目录也不存在
System.out.println(file1.mkdir());
System.out.println(file2.mkdir());
System.out.println(file3.mkdir());
/*输出:false
        true
        false
*/

public boolean mkdirs():创建文件目录,如果此文件目录存在,就不创建了,如果此目录文件的上层目录不存在,则一并创建

File file1=new File("D:\\aaa");//已存在
File file2=new File("D:\\bbb");//不存在
File file3=new File("D:\\ccc\\java");//不存在,且上层目录也不存在
System.out.println(file1.mkdirs());
System.out.println(file2.mkdirs());
System.out.println(file3.mkdirs());
/*输出:false
        true
        true
*/

注意事项:如果你创建文件或者文件目录没有写盘符路径,那么默认在项目路径下

删除功能

public boolean delete():删除文件或者文件夹

注意事项:Java中的删除不走回收站,要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目录

相关文章: