详解Java的File类(成员变量、构造方法及常用方法)

一、概述

java.io.File 类是文件和目录路径名的抽象表示
主要用于文件和目录的创建 查找和删除等操作

Java将电脑中的文件和文件夹目录封装为了一个File类
可以使用File类对文件和文件夹进行操作

可以使用File的方法来:

  • 创建一个文件/文件夹
  • 删除文件/文件夹
  • 获取文件/文件夹
  • 判断文件/文件夹是否存在
  • 对文件夹进行遍历
  • 获取文件的大小

File类是一个与系统无关的类 任何操作系统都可以使用这个类中的方法

二、File类的静态成员变量

1、路径分隔符

File.pathSeparator()

路径分隔符在Windows下为分号 在Linux下为冒号

使用:

String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);

2、文件名称分隔符

文件名称分隔符在Windows下为反斜杠 在Linux下为正斜杠

File.separator()
String separator = File.separator;
System.out.println(separator);

不同系统下的路径分隔符和文件名称分隔符是不同的

Windows:C:\code\test.txt
Linux:C:/code/test.txt

操作系统的路径不能写死
因为项目可能会部署到不同的系统下
因此 上例可写作:

"C:"+File.separator+"code"+File.separator+"test.txt"

手写分隔符用FIle类的分隔符方法代替


三、路径的概述

1、绝对路径

绝对路径是一个完整的路径
是以盘符(例:C盘或D盘)开始的路径
例:C:\\code\\

2、相对路径

相对路径是一个简化的路径
相对于当前项目的根目录(例:C:\code\)
若使用当前项目的根目录 则路径可以简化书写
例:C:\code\test.txt可简化为test.txt 省略项目的根目录

注:
1、路径是不区分大小写的
2、路径中的文件名称分隔符在Windows中使用反斜杠
反斜杠是转义字符 两个反斜杠才代表一个普通的反斜杠


四、File类的构造方法

1、File(String pathname)

public File(String pathname)

通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
参数:pathname 字符串形式的路径名称

  • 路径可以以文件结尾 也可以以文件夹结尾
  • 路径可以是相对路径 也可以是绝对路径
  • 路径可以是存在的 也可以是不存在的

创建File对象 只是将字符串的路径封装为File对象 不考虑路径的真假情况

例:

File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
System.out.println(file1);// F:\IdeaProjects\filetest\a.txt

File file2=new File("F:\\IdeaProjects\\filetest");
System.out.println(file2);// F:\IdeaProjects\filetest

File file3=new File("a.txt");
System.out.println(file3);// a.txt

2、File(String parent, String child)

public File(String parent, String child) 

从父路径名字符串和子路径名字符串创建新的File实例
参数1:parent 父路径
参数2:child 子路径

  • 父路径和子路径可以单独书写 使用灵活
  • 父路径和子路径都可以变化
private static void filemethod2(String parent, String child)
{
    File file=new File(parent,child);
    System.out.println(file);
}

3、File(File parent, String child)

public File(File parent, String child) 

从父抽象路径名和子路径名字符串创建新的File实例
参数1:parent 父路径
参数2:child 子路径

  • 父路径和子路径可以单独书写 使用灵活
  • 父路径是File类型 因此可以使用File类的方法对路径进行一些操作 再使用路径创建对象
// 父路径
File parent=new File("F:\\");

File file=new File(parent,"a.txt");
System.out.println(file);// F:\a.txt

五、File类的常用方法(获取、判断、创建删除、遍历)

Ⅰ、获取之方法

1、getAbsolutePath()

public String getAbsolutePath() 

返回此File的绝对路径名字符串

获取构造方法中传递的路径
无论路径是绝对的还是相对的 该方法返回的永远是绝对路径

File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
System.out.println(file1.getAbsolutePath());// F:\IdeaProjects\filetest\a.txt

File file2=new File("a.txt");
System.out.println(file2.getAbsolutePath());// F:\IdeaProjects\filetest\a.txt

2、getPath()

public String getPath() 

将此File转换为路径名字符串

获取构造方法中传递的路径
构造方法中传递的是什么 返回的就是什么

File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
File file2=new File("a.txt");
System.out.println(file1.getPath());// F:\IdeaProjects\filetest\a.txt
System.out.println(file2.getPath());// a.txt

注:
File类的toString()调用的就是该方法

源码:

public String toString() {
    return getPath();
}

3、getName()

public String getName() 

返回由此File表示的文件或目录的名称

获取的就是构造方法传递路径的结尾部分(要么是文件 要么是文件夹)

File file1=new File("F:\\IdeaProjects\\filetest\\a.txt");
System.out.println(file1.getName());// a.txt
File file2=new File("F:\\IdeaProjects\\filetest");
System.out.println(file2.getName());// filetest

4、length()

public long length() 

返回由此File表示的文件的大小(不是长度)

获取的是构造方法指向的文件的大小 以字节为单位

  • 文件夹没有大小概念 因此无法获取文件夹的大小 返回0
  • 若构造方法中给出的路径不存在 则返回0
File file1=new File("F:\\IdeaProjects\\filetest\\a.jpg");
System.out.println(file1.length());// 2582

File file2=new File("F:\\IdeaProjects\\filetest\\b.jpg");
System.out.println(file2.length());// 0

File file3=new File("F:\\IdeaProjects\\filetest");
System.out.println(file3.length());// 0

Ⅱ、判断之方法

1、exists()

public boolean exists() 

此File表示的文件或目录是否实际存在

用于判断构造方法中的路径是否存在

  • 若存在 返回true
  • 若不存在 返回false
File file1=new File("F:\\IdeaProjects\\filetest");
System.out.println(file1.exists());// true

File file2=new File("F:\\IdeaProjects\\aaa");
System.out.println(file2.exists());// false

File file3=new File("a.jpg");// 访问的是项目路径下的相对路径
System.out.println(file3.exists());// true

File file4=new File("123.jpg");// 访问的是项目路径下的相对路径
System.out.println(file4.exists());// false

2、isDirectory()和isFile()

isDirectory():

public boolean isDirectory() 

此File表示的是否为目录
与isFile()相反 因为不是目录就是文件
路径必须是存在的 否则返回false

isFile():

public boolean isFile() 

此File表示的是否为文件
与isDirectory()相反 因为不是目录就是文件
路径必须是存在的 否则返回false

用于判断构造方法中给定的路径是否以文件夹/文件结尾

  • 若为是 返回true
  • 若为否 返回false
File file1=new File("F:\\IdeaProjects\\filetest");
// 该文件或文件夹若存在 才获取
if (file1.exists())
{
	System.out.println(file1.isDirectory());// true
	System.out.println(file1.isFile());// false
}

File file2=new File("F:\\IdeaProjects\\filetest\\a.jpg");
// 该文件或文件夹若存在 才获取
if (file1.exists())
{
	System.out.println(file2.isDirectory());// false
	System.out.println(file2.isFile());// true
}

Ⅲ、创建删除之方法

1、createNewFile()

public boolean createNewFile() 

当且仅当具有该名称的文件尚不存在时 创建一个新的空文件

返回值:布尔值

  • true:文件不存在 创建文件
  • false:文件已存在 不创建

注:

  • 1、此方法只能创建文件 不能创建文件夹
  • 2、路径必须为真实存在的 否则抛出异常

该方法会抛出IOException 因此 调用该方法必须处理该异常 要么throws 要么trycatch

File file1=new File("F:\\IdeaProjects\\filetest\\1.txt");
System.out.println(file1.createNewFile());// true

File file2=new File("2.txt");
System.out.println(file2.createNewFile());// true 填写相对路径会创建在当前项目的src下

File file3=new File("F:\\IdeaProjects\\filetest\\新建文件夹");
System.out.println(file3.createNewFile());// true 创建了一个文件 名为新建文件夹

File file4=new File("F:\\abc\\3.txt");
System.out.println(file4.createNewFile());// Exception in thread "main" java.io.IOException: 系统找不到指定的路径。

2、mkdir()和mkdirs()

mkdir():

public boolean mkdir() 

创建由此File表示的目录

mkdirs():

public boolean mkdirs() 

创建由此File表示的目录 包括任何必需但不存在的父目录

mkdir() 只能创建单级文件夹
mkdirs() 既可以创建单级文件夹 又可以创建多级文件夹 因此建议使用此方法

返回值:布尔值

  • true:文件夹不存在 创建文件夹
  • false:文件夹已存在 不创建 / 给出的路径不存在

这两个方法只能创建文件夹 并不能创建文件

File file1=new File("F:\\IdeaProjects\\filetest\\folder");
System.out.println(file1.mkdir());// true

File file2=new File("F:\\IdeaProjects\\filetest\\f\\o\\l\\d\\e\\r");
System.out.println(file2.mkdir());// false
System.out.println(file2.mkdirs());// true

File file3=new File("F:\\IdeaProjects\\filetest\\t.txt");
System.out.println(file3.mkdirs());// true 创建了一个文件夹 名为t.txt

File file4=new File("F:\\IdeaProjects\\fff\\k.txt");
System.out.println(file4.mkdirs());// true 不会抛出异常 但路径不存在不会创建

3、delete()

public boolean delete() 

删除由此File表示的文件或目录

该方法既可以删除文件又可以删除文件夹

返回值:布尔值

  • true:文件或文件夹删除成功
  • false:文件夹中有内容 不删除 / 给定的路径不存在

注:
该方法是直接在硬盘删除文件或文件夹 文件不会到回收站 请谨慎

File file1=new File("2.txt");
System.out.println(file1.delete());// true

Ⅳ、目录遍历之方法

1、list()

public String[] list() 

返回一个String数组 表示该File目录中的所有子文件或目录

获取目录中所有文件或文件夹的名称 并将多个名称存储到字符串类型的数组中

File file1=new File("F:\\IdeaProjects\\filetest");
String[] list1 = file1.list();
for (String fileName:list1)
{
    System.out.println(fileName);
}

File file2=new File("F:\\IdeaProjects\\filetest\\1.txt");
String[] list2 = file2.list();
for (String fileName:list2)
{
    System.out.println(fileName);// Exception in thread "main" java.lang.NullPointerException
}

File file3=new File("F:\\IdeaProjects\\fff");
String[] list3 = file3.list();
for (String fileName:list3)
{
    System.out.println(fileName);// Exception in thread "main" java.lang.NullPointerException
}

2、listFiles()

public File[] listFiles() 

返回一个File数组 表示该File目录中的所有的子文件或目录

获取目录中所有文件或文件夹 将这些文件和文件夹封装为File对象 并将多个File对象存储到File类型的数组中

File file1=new File("F:\\IdeaProjects\\filetest");
File[] files = file1.listFiles();
for (File file:files)
{
    System.out.println(file);
}

发布了56 篇原创文章 · 获赞 0 · 访问量 1165

猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/104673576