构造方法:
public File(String pathname); // 文件的完整路径
public File(File parent, String child); // 父路径和子路径
创建文件方法:
public boolean createNewFile() throws IOException
import java.io.File;
public class MAIN {
public static void main(String[] args) throws Exception {
File file = new File("D:\\mldn.txt");
System.out.println(file.createNewFile()); // 创建文件,true表示创建成功,false表示文件已经存在创建失败
}
}
第一次运行:

第二次运行:

判断文件存在:
public boolean exists(); // true 表示存在
import java.io.File;
public class MAIN {
public static void main(String[] args) throws Exception {
File file = new File("D:\\mldn.txt");
if (file.exists()) { // 文件存在
System.out.println("文件已存在");
} else { // 文件不存在
file.createNewFile();
System.out.println("文件已创建"); // 创建文件
}
}
}

删除文件:
public boolean delete(); // true表示删除成功
import java.io.File;
public class MAIN {
public static void main(String[] args) throws Exception {
File file = new File("D:\\mldn.txt");
if (file.exists()) { // 文件存在
file.delete();
System.out.println("文件存在但是已删除");
} else { // 文件不存在
file.createNewFile();
System.out.println("文件已创建"); // 创建文件
}
}
}

在Windows做项目的开发,在Linux或Unix做项目的部署和发布,那么就需要考虑一个问题:
不同系统的差异性,例如:
Windows的分隔符是“ \ ”,而Linux的分隔符是“ / ”。
那么为了解决这个问题,File类就提供了一个常量:public static final String separator;
使用(正常路径的编写):
File file = new File("D:" + File.separator+"mldn.txt");
等同于Windows下:
File file = new File("D:\\mldn.txt");
因为系统的版本不断更新,功能也在不断地加强,所以现在的路径分隔符一般都可以随意使用,比如在Windows下使用Linux的路径分隔符:
File file = new File("D:/mldn.txt");
上面的符号使用不会出错。
但是还是建议使用File.separator。
注意事项:
- 在使用File类进行文件处理的时候的过程是:程序 → JVM → 操作系统函数 → 文件处理
|- 所以在进行同一文件反复删除和创建的时候,有可能会出现延迟的问题,所以最好的方案就是文件不要重名。
- 在进行文件的创建的时候有一个重要的前提:文件的父路径必须首先存在。
解决方法:
获取父路径:public String getParentFile();
创建目录:
创建单级目录:public boolean mkdir();
创建多级目录:public boolean mkdirs();
import java.io.File;
public class MAIN {
public static void main(String[] args) throws Exception {
// File file = new File("D:" + File.separator+"mldn.txt");
File file = new File("D:" + File.separator + "TXT" + File.separator + "mldn.txt");
if (!file.getParentFile().exists()){ // 父目录不存在
file.getParentFile().mkdirs(); // 创建父路径
}
if (file.exists()) { // 文件存在
file.delete();
System.out.println("文件存在但是已删除");
} else { // 文件不存在
file.createNewFile();
System.out.println("文件已创建"); // 创建文件
}
}
}

父目录的判断会提升程序的时间复杂度,所以为了提升这一点点的性能尽量保证目录事先已经创建,就不用进行这一步的判断。
读取文件信息:
最后一次修改时间:public long lastModified();
文件是否可读:public boolean canRead();
文件是否可写:public boolean canWrite();
获取文件长度:public long length(); // 返回的是long类型数据(long 用来定义时间日期和文件大小),返回的是字节长度
判断是否是文件:public boolean isFile();
判断是否是目录:public boolean isDirectory();
列出目录中所有的内容:public File[] listFiles()
import java.io.File;
import java.text.DateFormat;
import java.util.Arrays;
import java.util.Date;
public class MAIN {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "TXT" + File.separator + "mldn.txt");
System.out.println("文件是否可读:" + file.canRead());
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("获取文件长度:" + file.length());
System.out.println("最后一次修改时间:" + new Date(file.lastModified()));
System.out.println("判断是否是目录: " + file.isDirectory());
System.out.println("判断是否是文件: " + file.isFile());
File file1 = new File("D:" + File.separator);
if (file1.isDirectory()){ // 如果当前是一个目录
File[] res = file1.listFiles(); // 保存目录下的内容为数组
for (File re : res) {
System.out.println(re);
}
}
}
}


获取目录下所有内容:
import java.io.File; public class MAIN { public static void main(String[] args) { File file = new File("D:" + File.separator); // 获取路径下的文件信息 listDir(file); } public static void listDir(File file) { if (file.isDirectory()) { // 是一个目录 File[] res = file.listFiles(); // 列出目录中的全部内容 if (res != null) { for (File re : res) { listDir(re); // 继续判断 // System.out.println(res[x]); } } } System.out.println(file); // 获得一个完整的路径
// file.delete(); // 谨慎操作,因为会删除获取到的所有路径下的文件,同样也可以设置路径来进行删除操作
}
}
批量获取(或修改)文件名称:
面试考题
import java.io.File;
public class MAIN {
public static void main(String[] args) {
File file = new File("D:" + File.separator + "TXT" + File.separator);
long start = System.currentTimeMillis();
renameDir(file);
long end = System.currentTimeMillis();
System.out.println("操作用时:" + (end - start));
}
public static void renameDir(File file){
if (file.isDirectory()){ // 是一个目录
File[] res = file.listFiles(); // 列出子目录的内容
if (res != null){
for (File re : res) {
renameDir(re); // 递归获取文件信息
}
}
}else {
if (file.isFile()){ // 是文件,进行重命名
// System.out.println(file);
String filename = null;
if (file.getName().contains(".")){ // 找到名称中有 . 的文件
filename = file.getName().substring(0,file.getName().lastIndexOf(".")) + ".txt"; // getName()方法返回的是此路径名称中的最后路径名称,然后再用lastIndexOf()方法找到最后的" . "的索引值,再进行截取(此时只有文件名称),最后加上新的后缀 .txt
}else { // 文件名称没有 " . "
filename= file.getName() + ".txt"; // 直接加上后缀
}
File newFile = new File(file.getParentFile(),filename); // 使用父路径和子路径的构造方法创建新的文件
file.renameTo(newFile); // 重命名
System.out.println(newFile);
}
}
}
}
修改前:

修改后:

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)