提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、概述
java.io.File类:文件和文件目录路径的抽象表示形式,与平台本身无关。File类中设计到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未设计写入或读取文件内容的操作,若想要读取或写入文件内容,则必须使用IO流来完成。
若想要在Java程序中表示一个真实存在的文件或目录,则必须有一个File对象,但是Java程序中的一个File对象,可能并不对应一个真实存在的文件或目录。
File对象可作为餐宿传递给流的构造器,指明读取或写入的"终点"。
二、基本使用
①绝对路径与相对路径
- 绝对路径:固定的路径,从主机盘符开始。
- 相对路径:相对于某个位置开始的路径。
- main方法中的相对路径是从当前工程开始。
- 单元测试的相对路径是相对于当前模块。
②路径分隔符
- Windows、DOS系统:使用""来表示。
- UNIX和URL:使用"/"来表示。
Java为了支持跨平台运行,为了解决路径分隔符在不同OS而不同的问题,File提供了一个常量File.separator,可根据操作系统来动态提供分隔符:
File file1 = new File("d:\\atguigu\\info.txt");
File file2 = new File("d:" + File.separator + "atguigu" + File.separator + "info.txt");
File file3 = new File("d:/atguigu");
③构造方法
方法名称 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent,String child) | 根据父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent,String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
package org.example;
import java.io.File;
public class Main {
public static void main(String[] args) {
//1.根据字符串表示的路径变为File对象
String str="C:\\Users\\lenovo\\Desktop\\a.txt";
File file1=new File(str);
//当该文件真实存在时才会产生对应关系
//创建File对象后,就表示一个真实的路径,从而可调用File中的方法
System.out.println(file1);
//2.将父级路径与子级路径进行拼接来构造File对象
/*
* 以"C:\\Users\\lenovo\\Desktop\\a.txt"为例,有:
* 父级路径:C:\\Users\\lenovo\\Desktop
* 子级路径:a.txt
* */
String parent="C:\\Users\\lenovo\\Desktop";
String child="a.txt";
File file2=new File(parent,child);
//实质就是加了间隔符
System.out.println(file2);
//3.将一个File表示的路径和String表示的路径进行拼接
File parent2=new File("C:\\Users\\lenovo\\Desktop");
String child2="a.txt";
File file3=new File(parent2,child2);
System.out.println(file3);
}
}
④常用方法
获取功能
package org.example;
import java.io.File;
public class Main {
public static void main(String[] args) {
File file=new File("G:\\408\\2022+2023年408");
System.out.println("获取绝对路径:"+file.getAbsolutePath());
System.out.println("获取路径:"+file.getPath());
System.out.println("获取文件名:"+file.getName());
System.out.println("获取上级目录名称:"+file.getParent());
System.out.println("获取文件长度(字节数):"+file.length());
System.out.println("获取最后一次修改时间(ms):"+file.lastModified());
System.out.println("将目录下所有文件或文件目录名存入字符串数组中:");
String[] list = file.list();
for(String s : list){
System.out.print(s+" ");
}
System.out.println("将目录下所有文件或文件目录名存入文件数组中:");
File[] files = file.listFiles();
for(File f : files){
System.out.print(f+" ");
}
}
}
判断功能
package org.example;
import java.io.File;
public class Main {
public static void main(String[] args) {
File file=new File("G:\\408\\2022+2023年408");
System.out.println("判断是否是目录"+file.isDirectory());
System.out.println("判断是否是文件"+file.isFile());
System.out.println("判断是否真实存在"+file.exists());
System.out.println("判断是否可读"+file.canRead());
System.out.println("判断是否可写"+file.canWrite());
System.out.println("判断是否是隐藏"+file.isHidden());
}
}
创建功能
@Test
public void test6() throws IOException {
File file1 = new File("Hello.txt");
if(!file1.exists()){
//文件的创建
file1.createNewFile();
System.out.println("创建成功");
}else{//文件存在
file1.delete();
System.out.println("删除成功");
}
}
@Test
public void test7(){
//文件目录的创建
File file1 = new File("d:\\io\\io1\\io3");
boolean mkdir = file1.mkdir();
if(mkdir){
System.out.println("创建成功1");
}
File file2 = new File("d:\\io\\io1\\io4");
boolean mkdir1 = file2.mkdirs();
if(mkdir1){
System.out.println("创建成功2");
}
//要想删除成功,io4文件目录下不能有子目录或文件
File file3 = new File("D:\\io\\io1\\io4");
file3 = new File("D:\\io\\io1");
System.out.println(file3.delete());
}
注,以上test6所用的是相对路径,会默认创建在项目路径下:
删除功能
三、源码分析
算是留一个坑,考研+技术同时抓的话还是要以推进度为主,这里的源码分析在我完成后端技术的复习之后再来填这个坑。