导语:初学者在学习File类时可能存在一定的迷茫性,为什么我们要学习File类。了解File类的重要性,才能让我们对知识有更多的求知欲望。想要学习如何从一段普通的java代码来说将我们电脑的文件进行读取到控制台中,那么File类就是先导的基础知识点之一。
一、File类介绍:
java.io.File类是文件和目录路径名的抽象表示,可用于文件和目录的创建、删除、查找等操作。Java将电脑中的文件和目录封装成为File对象,因此我们可以使用File类来操作文件和目录。File类的方法可分为:
①创建文件/目录;
②删除文件和目录;
③获取文件/目录;
④判断文件/目录;
⑤获取文件大小;
File类和操作系统无关的,任何操作系统(Windows、Linux等)都可以使用File类的方法。
(Fig01.java.io.File类)
二、File类详解:
对于初学者,可查阅中文手册进行学习:Java 8 中文版 - 在线API中文手册 - 码工具
引入:路径
在学习File类时,我们要回顾一下关于相对路径和绝对路径的知识点。对于相对路径和绝对路径的定义如下:
相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系
绝对路径:目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。
PS:路径是部分大小写的。
(一)静态变量:
/*
* File类源码截取:关于静态变量的定义如下
*/
/*
* 与系统有关的默认名称分隔符
*/
public static final char separatorChar = fs.getSeparator();
/*
* 与系统有关的默认名称分隔符,被表示为一个字符串
* 不同系统的名称分隔符
* 例如->windows:反斜杠(\) Linux:正斜杠(/)
*/
public static final String separator = "" + separatorChar;
/*
* 与系统路径有关的路径分隔符
*/
public static final char pathSeparatorChar = fs.getPathSeparator();
/*
* 与系统路径有关的路径分隔符,被表示为一个字符串
* 不同系统的路径分隔符
* 例如->windows:分号(;) Linux:冒号(:)
*/
public static final String pathSeparator = "" + pathSeparatorChar;
(二)构造方法:
构造方法可见如下代码:(其中File(URI uri))未给出范例
import java.io.File;
public class DemoFile01 {
public static void main(String[] args) {
/*
构造方法:File(String pathname)
*/
File file1 = new File("D:\\系统默认\\桌面\\FileReader.txt");
System.out.println("构造方法 File(String pathname) -->"+file1);
System.out.println("*******************");
/*
构造方法:File(String parent,String child)
*/
File file2 = new File("D:\\系统默认\\桌面\\", "FileReader.txt");
System.out.println("构造方法 File(String parent,String child) -->"+file2);
System.out.println("*******************");
/*
构造方法:File(File parent,String child)
*/
File file3 = new File("D:\\系统默认\\桌面\\");
File file4 = new File(file3, "FileReader.txt");
System.out.println("构造方法 File(File parent,String child) -->"+file4);
System.out.println("*******************");
}
}
控制台输出如下:
(三)常见方法:
1.创建和删除文件/目录的方法:
(1)createNewFile() 当且仅当具有该名称的文件尚不存在时,原子地创建一个由该抽象路径名命名的新的空文件。
测试案例:在当前项目创建文件名为“1.txt”文件。
import java.io.File;
import java.io.IOException;
/*
File类的常用方法01
*/
public class DemoFile02 {
public static void main(String[] args) {
File file = new File("1.txt");
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试结果:
(2)mkdir() 创建由此抽象路径名命名的目录。
测试案例:在项目中创建目录名为“File01”的目录
import java.io.File;
public class DemoFile03 {
public static void main(String[] args) {
File file = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01");
file.mkdir();
System.out.println("文件夹创建成功");
}
}
测试结果:
(3)mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录。
测试案例:在(2)的基础目录路径创建目录“File03”及其父目录“File02”
正确示范:
import java.io.File;
public class DemoFile03 {
public static void main(String[] args) {
File file = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
file.mkdirs();
System.out.println("目录及其父目录创建成功");
}
}
测试结果:
(4)delete() 删除由此抽象路径名表示的文件或目录。
测试案例:将(1)(3)创建的文件名为“1.txt”的文件和目录名为“File3”的目录删除。
import java.io.File;
public class Demo04 {
public static void main(String[] args) {
File file1 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file2 = new File("1.txt");
file1.delete();
System.out.println("目录删除成功");
file2.delete();
System.out.println("文件删除成功");
}
}
测试结果:
2.获取文件/目录的方法:
(1)getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
测试案例:调用getAbsolutePath()方法测试绝对路径、相对路径和不存在路径的返回结果。
import java.io.File;
public class DemoFile05 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
System.out.println("相对路径-->"+file1.getAbsoluteFile());
System.out.println("绝对路径-->"+file2.getAbsoluteFile());
System.out.println("不存在路径-->"+file3.getAbsoluteFile());
}
}
测试结果:
(2)getName() 返回由此抽象路径名表示的文件或目录的名称。
测试案例:调用getName()方法测试绝对路径、相对路径和不存在路径的返回结果。
import java.io.File;
public class DemoFile06 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
System.out.println("相对路径-->"+file1.getName());
System.out.println("绝对路径-->"+file2.getName());
System.out.println("不存在路径-->"+file3.getName());
}
}
测试结果:
(3)getPath() 将此抽象路径名转换为路径名字符串。
测试案例:调用getPath()方法测试绝对路径、相对路径和不存在路径的返回结果。
import java.io.File;
public class DemoFile07 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
System.out.println("相对路径-->"+file1.getPath());
System.out.println("绝对路径-->"+file2.getPath());
System.out.println("不存在路径-->"+file3.getPath());
}
}
测试结果:
(4)length() 返回由此抽象路径名表示的文件的长度。
测试案例:调用length()方法求出文件、目录、不存在文件、不存在目录的长度。
import java.io.File;
public class DemoFile08 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
File file4 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\1.txt");
System.out.println("文件-->"+file1.length());
System.out.println("目录-->"+file2.length());
System.out.println("不存在文件-->"+file4.length());
System.out.println("不存在目录-->"+file3.length());
}
}
测试结果:
3.判断文件/目录的方法:
(1)exists() 测试此抽象路径名表示的文件或目录是否存在。
测试案例:测试某文件/目录路径是否为存在。
import java.io.File;
public class DemoFile09 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
File file4 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\1.txt");
System.out.println("存在文件-->"+file1.exists());
System.out.println("存在目录-->"+file2.exists());
System.out.println("不存在文件-->"+file4.exists());
System.out.println("不存在目录-->"+file3.exists());
}
}
测试结果:
(2)isDirectory() 测试此抽象路径名表示的文件是否为目录。
测试案例:测试某路径是否为目录。
import java.io.File;
public class DemoFile10 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
File file4 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\1.txt");
System.out.println("存在文件-->"+file1.isDirectory());
System.out.println("存在目录-->"+file2.isDirectory());
System.out.println("不存在文件-->"+file4.isDirectory());
System.out.println("不存在目录-->"+file3.isDirectory());
}
}
测试结果:
(3)isFile() 测试此抽象路径名表示的文件是否为普通文件。
测试案例:测试某路径是否为文件。
import java.io.File;
public class DemoFile11 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
File file4 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\1.txt");
System.out.println("存在文件-->"+file1.isFile());
System.out.println("存在目录-->"+file2.isFile());
System.out.println("不存在文件-->"+file4.isFile());
System.out.println("不存在目录-->"+file3.isFile());
}
}
测试结果:
4.遍历文件/目录的方法:
(1)list() 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。
测试案例:
import java.io.File;
public class DemoFile12 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
File file4 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\1.txt");
System.out.println("存在文件-->"+file1.list());
System.out.println("存在目录-->"+file2.list());
System.out.println("不存在文件-->"+file4.list());
System.out.println("不存在目录-->"+file3.list());
}
}
测试结果:
(2)listFiles() 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。
测试案例:
import java.io.File;
public class DemoFile12 {
public static void main(String[] args) {
File file1 = new File("1.txt");
File file2 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\File02\\File03");
File file3 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File0333");
File file4 = new File("C:\\Users\\lenovo\\IdeaProjects\\java-01-maven\\Study_File_IOStream\\File01\\1.txt");
System.out.println("存在文件-->"+file1.listFiles());
System.out.println("存在目录-->"+file2.listFiles());
System.out.println("不存在文件-->"+file4.listFiles());
System.out.println("不存在目录-->"+file3.listFiles());
}
}
测试结果:
5.其他方法
File类的方法并不止以上的这些,由于篇幅有限,所以更多的方法还望读者在之后提升自我的学习当中能够一一进行测试,加深印象。