Java中File类的方法详解
File类也是Java中一个比较重要的类,通过他我们可以实现对文件的一系列操作,其内置了很多方法,下面我将按方法的功能分块,逐一讲解:
快速导航
构造方法

常用方法
官方API如下(基于Java 11):

创建目录
构造方法以及mkdir()方法
@Test
public void mkdirTest() {
//创建一个抽象路径,用于之后操作,可以是一级目录可以是多级目录
//此举并不会在内存中产生一个文件,想要产生文件必须调用方法(mkdir)
//File类的实例是不可变的; 也就是说,一旦创建, File对象表示的抽象路径File永远不会改变。
//几种方式如下:
//默认在当前项目根目录
//File file1 = new File("xxx");
//File file11 = new File("a/b/c/d/e");
//在当前项目所在盘符下
//File file2 = new File("/xxx");
//在指定位置
//File file3 = new File("c:/xxx");
//File file4 = new File("c:\\xxxx");
//2.创建方法 mkdir()和 mkdirs() 返回一个Boolean值,
// 创建成功返回true,失败返回false,如果指定目录下已经存在则不会创建成功(false)
// 两者区别是:mkdir只能创建单级目录,mkdirs可以创建多级目录
// 如果声明的是多级目录,则调用mkdirs,声明的是单级则调用mkdir
//System.out.println(file1.mkdir());
//System.out.println(file11.mkdir()); //false 因为声明的是多级的,应该调用mkdirs
//System.out.println(file11.mkdirs());
//System.out.println(file2.mkdir());
//System.out.println(file3.mkdir());
//System.out.println(file4.mkdir());
}
createNewFile() 和 createTempFile()
@Test
public void createTest() {
//创建目录
File file = new File("d:/hello/abc");
if (!file.exists()) {
file.mkdirs();
System.out.println("创建成功!");
}
//在刚创建的目录中在创建一个文件createNewFile()
File file1 = new File("d:/hello/abc/hello.txt");
try {
file1.createNewFile();
} catch (IOException e) {
System.out.println("创建失败!");
}
if (file1.exists()) {
file1.delete();
System.out.println("删除成功!");
}
//在刚创建的目录中在创建一个指定文件格式的文件(例如 (...).jpg)
//createTempFile(String prefix, String suffix,【 File directory】)
//参数
//prefix - 用于生成文件名的前缀字符串; 必须至少三个字符长
//suffix - 用于生成文件名的后缀字符串; 可以是null ,在这种情况下将使用后缀".tmp"
//directory - 要在其中创建文件的目录,如果要使用默认临时文件目录, null (选填,不填默认为null)
//结果 表示新创建的空文件的抽象路径名
try {
File.createTempFile("123", ".jpg", file);
} catch (IOException e) {
e.printStackTrace();
}
}
判断 is...
@Test
public void existsTest() {
//1.exists()测试此抽象路径名表示的文件或目录是否存在。
File file11 = new File("a/b/c/d/e");
System.out.println(file11.exists()); //false
file11.mkdirs();
System.out.println(file11.exists()); //true
}
@Test
public void isTest() {
File file11 = new File("a/b/c/d/e");
System.out.println(file11.exists()); //false
file11.mkdirs();
System.out.println(file11.exists()); //true
//测试此抽象路径名表示的文件是否为普通文件。
System.out.println(file11.isFile()); //当前为目录,所以为false
System.out.println(file11.listFiles()[0].isFile()); //1.txt 所以为true
//测试此抽象路径名表示的文件是否为目录。
System.out.println(file11.isDirectory());
//测试此抽象路径名是否为绝对路径。
System.out.println(file11.isAbsolute());
//测试此抽象路径名指定的文件是否为隐藏文件。
System.out.println(file11.isHidden());
}
toString()
用得不多。。。
@Test
public void toStringTest() {
//4.toString() 将所指路径转换为字符串
//File file11 = new File("a/b/c/d/e");
//System.out.println(file11.toString()); //"a\b\c\d\e"
}
获取字节数length()
@Test
public void lengthTest() {
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13\\zuoye\\AddFile.java");
if (file.exists()) {
//获取文件字节数,如果是文件夹则为 0
System.out.println(file.length());
}
}
删除文件
@Test
public void deleteTest() {
//3.删除文件方法delete()
//默认在当前项目根目录
//File file1 = new File("xxx");
//File file11 = new File("a/b/c/d/e");
//如果此文件或者目录不存在,则删除失败返回false
//如果此文件不是空文件(空目录),删除失败false
//如果此路径是多级目录,则只删除最内层的文件或者目录
//System.out.println(file1.delete()); //true
//System.out.println(file11.delete()); //true
}
如果要删除带有文件的目录,可以参考这篇点击跳转
更名操作
@Test
public void renameTest() throws IOException {
File file = new File("ahello/a/abc.txt");
// System.out.println(file.mkdirs());
System.out.println(file.createNewFile());
// file.mkdirs();
System.out.println(file);
//如果重命名的文件已存在,则不会重命名
System.out.println(file.renameTo(new File("a/b/c/abcd.txt")));
System.out.println(file.getName());
//注意事项:
//第一种场景:同一路径下文件重命名【文件重命名】
//第二种场景:将文件从一个路径移动另一个路径下,并且移动的文件进行重命名【文件移动重命名】
//第三种场景:修改文件夹的名称,文件夹里面没有文件的时候修改成功!
}
比较两个路径
@Test
public void compareToTest() {
//如果参数等于此抽象路径名,则为零;如果此抽象路径名按字典顺序小于参数,则为小于零;如果此抽象路径名在字典上大于参数,则值大于零
File f1 = new File("d:\\hello");
File f2 = new File("d:\\hello\\a");
File f3 = new File("d:\\hell");
File f4 = new File("d:\\hello");
//System.out.println(f1.compareTo(f2)); //-2
//System.out.println(f1.compareTo(f3)); //1
//System.out.println(f1.compareTo(f4)); //0
}
获取和修改最后修改时间
@Test
public void lastModifiedAndSetTest() {
//记录文件的最后修改时间,是一个long时间戳
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13");
long time = file.lastModified();
System.out.printf("%tF %<tT", time); //2021-12-14 08:44:38
System.out.println();
//boolean setLastModified(long time) 设置此抽象路径名指定的文件或目录的上次修改时间。
long now = System.currentTimeMillis();
file.setLastModified(now);
System.out.printf("%tF %<tT", now); //2021-12-14 18:15:32
}
获取子文件(也可以是目录)
@Test
public void listTest() {
/*
String[] list() 返回一个字符串数组,用于命名此抽象路径名表示的目录中的文件和目录。
String[] list(FilenameFilter filter) 返回一个字符串数组,用于命名由此抽象路径名表示的目录中的文件和目录,以满足指定的过滤器。
File[] listFiles() 返回一个抽象路径名数组,表示此抽象路径名表示的目录中的文件。
File[] listFiles(FileFilter filter) 返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter) 返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
static File[] listRoots() 列出可用的文件系统根目录。
*/
File file = new File("E:\\谷歌");
// list() 返回的是字符串数组
String[] listStr = file.list();
System.out.println(Arrays.toString(listStr));
// listFiles() 返回的是 File[] 可以对文件直接操作
File[] listF = file.listFiles();
for (File file1 : listF) {
System.out.print(file1.getName() + ", ");
}
// listRoots() 列出可用的文件系统根目录。
System.out.println();
File[] listRoots = File.listRoots();
for (File root : listRoots) {
System.out.println(root.getPath());
}
//对文件筛选操作
//两种方式
// FilenameFilter filter --- boolean accept(File dir, String name); dir为文件根目录(不包含此文件) name为文件名
// FileFilter filter -------- boolean accept(File pathname); pathname为文件路径(包含此文件)
//list(FilenameFilter filter) FilenameFilter支持lambda,两个参数()
String[] listStrs = file.list((path, name) -> name.endsWith("zip")); //列出所有以zip结尾的文件
System.out.println(Arrays.toString(listStrs));
//listFiles(FilenameFilter filter)
FilenameFilter filter;
File[] listFiles = file.listFiles((path, name) -> name.matches(".*[\\d+].*")); //获取所有文件名中带有数字的
for (File file1 : listFiles) {
System.out.print(file1.getName() + ", ");
}
//listFiles(FileFilter filter)
File[] lfs = file.listFiles(e -> e.getName().matches(".*[\\u4e00-\\u9fa5]+.*")); //获得包含中文的文件
for (File f : lfs) {
System.out.print(f.getName() + ", ");
}
}
get方法大汇总(基本都是获取)
@Test
public void getTest() throws IOException {
/*
返回值类型 方法名 描述
File getAbsoluteFile() 返回此抽象路径名的绝对形式。
String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串。
File getCanonicalFile() 返回此抽象路径名的规范形式。
String getCanonicalPath() 返回此抽象路径名的规范路径名字符串。
String getName() 返回此抽象路径名表示的文件或目录的名称。
String getPath() 将此抽象路径名转换为路径名字符串。
String getParent() 返回此抽象路径名父项的路径名字符串,如果此路径名未指定父目录,则返回 null 。
File getParentFile() 返回此抽象路径名父项的抽象路径名,如果此路径名未指定父目录,则返回 null 。
long getFreeSpace() 通过此抽象路径名返回分区 named中未分配的字节数。
long getUsableSpace() 通过此抽象路径名返回分区 named上此虚拟机可用的字节数。
long getTotalSpace() 通过此抽象路径名返回分区 named的大小。
*/
File file = new File("E:\\HelloJava\\Java_Study_Beiyou\\src\\day_12_13");
System.out.println(file.getAbsoluteFile()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getAbsolutePath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getCanonicalFile()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getCanonicalPath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getName()); //day_12_13
System.out.println(file.getPath()); //E:\HelloJava\Java_Study_Beiyou\src\day_12_13
System.out.println(file.getParent()); //E:\HelloJava\Java_Study_Beiyou\src
System.out.println(file.getParentFile()); //E:\HelloJava\Java_Study_Beiyou\src
System.out.println(file.getFreeSpace()); //339921727488
System.out.println(file.getTotalSpace()); //786633322496
System.out.println(file.getUsableSpace()); //339921727488
}
测试与设置权限
@Test
public void canTest() {
/*
boolean canExecute() 测试应用程序是否可以执行此抽象路径名表示的文件。
boolean canRead() 测试应用程序是否可以读取此抽象路径名表示的文件。
boolean canWrite() 测试应用程序是否可以修改此抽象路径名表示的文件。
*/
File file = new File("aaa\\bbb\\ccc\\test.txt");
System.out.println(file.canExecute()); //true
System.out.println(file.canRead()); //true
System.out.println(file.canWrite()); //true
}
@Test
public void setTest() {
/*
boolean setExecutable(boolean executable) 一种方便的方法,用于设置此抽象路径名的所有者执行权限。
boolean setExecutable(boolean executable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的执行权限。
boolean setReadable(boolean readable) 一种方便的方法,用于设置此抽象路径名的所有者读取权限。
boolean setReadable(boolean readable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的读取权限。
boolean setReadOnly() 标记此抽象路径名指定的文件或目录,以便仅允许读取操作。
boolean setWritable(boolean writable) 一种方便的方法,用于设置此抽象路径名的所有者写入权限。
boolean setWritable(boolean writable, boolean ownerOnly) 设置此抽象路径名的所有者或每个人的写入权限。
*/
File file = new File("aaa\\bbb\\ccc\\test.txt");
//System.out.println(file.setExecutable(false, false)); //false
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //true
//System.out.println(file.setReadable(false,false));
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //true
//System.out.println(file.setWritable(false,false));
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //false
//System.out.println(file.setReadOnly());
//System.out.println(file.canExecute()); //true
//System.out.println(file.canRead()); //true
//System.out.println(file.canWrite()); //false
}
Java中File类的方法详解的更多相关文章
- Java中hashCode与equal方法详解
转载自http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object ...
- Java中 hashCode()方法详解
先来看下Object源码里hashcode方法: /** * Returns a hash code value for the object. This method is * s ...
- java 中toString()方法详解
1.toString()方法 Object类具有一个toString()方法,你创建的每个类都会继承该方法.它返回对象的一个String表示,并且对于调试非常有帮助.然而对于默认的toString() ...
- java中枚举类的使用详解
/* * 通过JDK5提供的枚举来做枚举类 */ public enum Direction2 { FRONT("前"), BEHIND("后"), LEFT( ...
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- Java 中File类的createNewFile()与createTempFile(), delete和deleteOnExit区别
1. Java 中File类的createNewFile()与createTempFile()的区别 最近,在看代码时看到了一个方法, File.createTempFile() ,由此联想到File ...
- java中File的delete()方法删除文件失败的原因
java中File的delete()方法删除文件失败的原因 学习了:http://hujinfan.iteye.com/blog/1266387 的确是忘记关闭了: 引用原文膜拜一下: 一般来说 ja ...
- python中requests库使用方法详解
目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...
- PHP 中 16 个魔术方法详解
PHP 中 16 个魔术方法详解 前言 PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __constru ...
随机推荐
- Python基础之pytest参数化
上篇博文介绍过,pytest是目前比较成熟功能齐全的测试框架,使用率肯定也不断攀升.在实际 工作中,许多测试用例都是类似的重复,一个个写最后代码会显得很冗余.这里,我们来了解一下 @pytest.ma ...
- linux分区(挂载)
主分区: 最多4个扩展分区: 最多一个: 扩展分区+主分区最多4个: 不能存放数据,只能划分逻辑分区逻辑分区: 可格式化.存放数据: 分区编号只能从5开始(1.2.3.4编号为主分区或扩展分区) 所有 ...
- MySQL 截取小数位数
项目中遇到一些有关小数位数截取的问题,留下痕迹,以便后续使用时注意:个人推荐使用方法2),直接四舍五入 1)select FORMAT(1478568.2457,2): 查询出来的结果为: ,每隔3位 ...
- android studio 配置 Lombok 插件 -具体步骤
1.前言 idea 用惯了 Lombok 插件了,好用的很,可是开发安卓 却没有,即便在 android studio 安装了插件,但是仍然无法使用 因为需要配置 2.解决 (1)进入设置,找到插件设 ...
- 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手四次挥手,滑动窗口(整理转发)
网上查了一下端口状态的资料,我下面总结了一下,自己学习学习: TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死 ...
- HttpRunner3的HTTP请求是怎么发出去的
在HttpRunner3的示例代码中,发送HTTP请求的代码是这样写的: from httprunner import HttpRunner, Config, Step, RunRequest, Ru ...
- 【SpringCloud技术专题】「Gateway网关系列」(3)微服务网关服务的Gateway全流程开发实践指南(2.2.X)
开发指南须知 本次实践主要在版本:2.2.0.BUILD-SNAPSHOT上进行构建,这个项目提供了构建在Spring生态系统之上API网关. Spring Cloud Gateway的介绍 Spri ...
- 发现一个现象:golang中大量的go出新协程,必然在GC统计中出现1ms以上的GC延迟
结论:协程池还是有必要的,能够有效减小GC的压力. 我的某个服务,为了方(tou)便(lan),一些异步处理的场合直接go出协程来处理. 服务中使用这样的代码来统计GC的延迟: var mem run ...
- 面试突击17:HashMap除了死循环还有什么问题?
面试合集:https://gitee.com/mydb/interview 本篇的这个问题是一个开放性问题,HashMap 除了死循环之外,还有其他什么问题?总体来说 HashMap 的所有" ...
- 平滑增加Nginx模块
目录 一:平滑增加Nginx模块 1.1.增加模块必须重新编译 一:平滑增加Nginx模块 1.1.增加模块必须重新编译 解决依赖 编译安装不能解决依赖 yum install zlib zlib-d ...