详解 File类
在讲解File类之前,本人先要讲解下 路径,因为我们对于文件的操作是离不开路径的:
路径:
请观看本人博文 —— 《详解 绝对路径与 相对路径》
File类
概述:
文件 或 目录(即文件夹)的抽象表现形式,
我们通常可以通过使用File类来封装一个 文件 或 文件夹,以便我们对文件进行操作
那么,现在,本人来展示下这个类的构造方法;
- File(File parent, String child)
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例- File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例- File(String parent, String child)
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例- File(URI uri)
通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例
那么,本人现在就来展示下这些构造方法的使用:
package edu.youzg.about_io.about_file.core;
import java.io.File;
public class Test {
public static void main(String[] args) {
//File(String pathname)
//通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File file = new File("G:/Java/StudyForIO/test.txt");
//一个父路径,一个子路径
//File(String parent, String child)
//根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
//父路径是个字符串形式的
File file1 = new File("G:/Java/StudyForIO", "test.txt");
//File(File parent, String child)
//根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
File file2 = new File("G:/Java/StudyForIO");
//父路径是个File形式
File file3 = new File(file2, "test.txt");
}
}
现在,本人来展示下 File类的 常用API:
创建功能:
- public boolean createNewFile():
创建一个新的文件(返回true),
如果存在这样的文件,就不创建了(返回false)- public boolean mkdir():
创建文件夹(返回true),
如果存在这样的文件夹,就不创建了 (返回false)
(注意这个方法只能创建单层目录 ,如果创建多层目录得一层一层创建)- public boolean mkdirs():
创建文件夹(返回true),
如果父文件夹不存在,会帮你创建出来 可以创建多层目录 (返回true)
(当然也可以创建单层目录)
删除功能:
- public boolean delete():
删除文件或者文件夹 (返回true),在回收站中无法找到
(注意:删除文件夹时 这个文件夹必须是空文件夹 ;
如果这个文件夹里面有 文件/文件夹,则不能删除(返回false))
重命名/剪切 功能:
- public boolean renameTo(File dest):
重命名功能 —— 当源文件与目标文件 在同一目录下
剪切 功能 —— 当源文件与目标文件 不在同一目录下
判断功能:
- public boolean isDirectory():
判断是否是目录- public boolean isFile():
判断是否是文件- public boolean exists():
判断是否存在- public boolean canRead():
判断是否可读- public boolean canWrite():
判断是否可写- public boolean isHidden():
判断是否隐藏- public boolean isAbsolute();
判断是否使用的是绝对路径- public boolean canExecute();
判断是否是可执行文件(Linux系统下)
获取功能:
- public String getAbsolutePath():
获取绝对路径- public String getPath():
获取相对路径- public String getParent()
返回此抽象路径名父目录的路径名字符串;
如果此路径名没有指定父目录,则返回 null。- public File getParentFile()
返回此抽象路径名父目录的抽象路径名;
如果此路径名没有指定父目录,则返回 null。- public long getTotalSpace()
返回此抽象路径名指定的分区大小。
(即:返回总容量 单位字节)- public long getFreeSpace()
返回此抽象路径名指定的分区中 未分配的字节数。
(即:返回剩余容量 单位字节)- public String getName():
获取名称- public long length():
获取长度。单位 字节- public long lastModified():
获取最后一次的修改时间,单位 毫秒值- public String[] list():
获取指定目录下的 所有文件或者文件夹 的 名称数组- public File[] listFiles():
获取指定目录下的 所有文件或者文件夹 的 File数组
现在,本人来通过几个例子来展示下这些API的用法:
例1:
题:
判断G\测试图片 目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
package edu.youzg.about_io.about_file.core;
import java.io.File;
public class Test {
public static void main(String[] args) {
File file = new File("G:\\测试图片");
//思路:1.获取到 该目录下的所有文件或文件夹
//2.遍历这个文件数组,判断它是不是文件,
// 还要判断,它的后缀名,是不是.jpg结尾的
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile() && f.getName().endsWith(".jpg")){
System.out.println(f.getName());
}
}
}
}
首先,本人来展示下G盘的测试图片文件夹下的目录:

那么,让我们来看一下运行结果:

上图证明,我们的代码是正确的!
其实,File类还有一个非常好用的工具 —— 文件名称过滤器:
文件名称过滤器:
那么,什么是 文件名称过滤器 呢?
概述:
- public String[] list(FilenameFilter filter)
- public File[] listFiles(FilenameFilter filter)
那么,现在,本人分别使用这两种过滤器来实现例1的要求:
解法①:
package edu.youzg.about_io.about_file.core;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class Test {
public static void main(String[] args) {
File file = new File("G:\\测试图片");
File[] files = file.listFiles(new FilenameFilter() {
@Override
//过滤符合条件
public boolean accept(File dir, String name) {
System.out.println(dir+"==="+name);
File file1 = new File(dir, name);
if(file1.isFile()&&file1.getName().endsWith(".jpg")){
return true;
}else{
return false;
}
}
});
System.out.println("-----------------------------------------------");
for (File file1 : files) {
System.out.println(file1);
}
}
}

可以看到,本人在输出.jpg文件之前,专门输出了"dir+"==="+name",就是为了告诉大家:
用这个过滤器,想要该目录下的文件操作的话,就要使用构造方法,利用参数dir 和 name 去先构造相应的File类对象,才能对该目录下的文件进行操作。
解法②:
package edu.youzg.about_io.about_file.core;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public class Test {
public static void main(String[] args) {
File file = new File("G:\\测试图片");
File[] files = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// System.out.println(pathname);
if(pathname.isFile()&&pathname.getName().endsWith(".jpg")){
return true;
}else{
return false;
}
}
});
for (File file1 : files) {
System.out.println(file1);
}
}
}

那么,这个问题相信同学们已经学会了,本人再来给出一个例子:
例2:
题:判断G\测试图片 目录下是否有后缀名为.jpg的文件,如果有,把它的后缀名改成.png
package edu.youzg.about_io.about_file.core;
import java.io.File;
import java.io.FilenameFilter;
public class Test {
public static void main(String[] args) {
File file = new File("G:\\测试图片");
File[] files = file.listFiles(new FilenameFilter() {
@Override
//过滤符合条件
public boolean accept(File dir, String name) {
File file1 = new File(dir, name);
if(file1.isFile() && file1.getName().endsWith(".jpg")){
String newName = dir + "\\" + name.substring(0, name.length() - 4) + ".png"; //拼接路径名称
file1.renameTo(new File(newName)); //重命名
return true;
}else{
return false;
}
}
});
}
}
那么,现在我们来看一下运行后的 G\测试图片 目录:

上图可以清晰地看到,本人的代码达成了目标!
那么,相信同学们已经对这个类的API的使用了解得差不多了
现在,本人再来给出最后一个例子:
例3:
现在,本人在 G\测试图片 目录下 建立多级文件夹,如下图所示:

题:删除 G\测试图片 目录:
package edu.youzg.about_io.about_file.core;
import java.io.File;
import java.io.FilenameFilter;
public class Test {
public static void main(String[] args) {
File file = new File("G:\\测试图片");
removeDirection(file);
}
private static void removeDirection(File file) {
File[] files = file.listFiles(new FilenameFilter() {
@Override
//过滤符合条件
public boolean accept(File dir, String name) {
File file1 = new File(dir, name);
if(file1.isDirectory()){
removeDirection(file1); //仍然是文件夹,继续递归
}
file1.delete(); //不是文件夹,是文件,直接删除
return true;
}
});
file.delete(); //删除 G\\测试图片 目录
}
}
那么,本人来展示下运行后的G盘目录:

可以看到,G\测试图片 目录这个含有多级目录的目录被我们删除了!
那么有关File类的所有基本知识点就讲解完了。
(本人“I/O流”总集篇博文链接:https:////www.cnblogs.com/codderYouzg/p/12418404.html)
详解 File类的更多相关文章
- unity3D游戏开发之详解Animation类和Animator类
详解Animator类和Animation类 链接: http://wenku.baidu.com/link?url=SiaUYcdrNYjOYrWVDJSKGAYdJOntMTOhsVJtyBk2i ...
- 【python进阶】详解元类及其应用1
前言 元类在python中是很重要的一部分,我将分两次去讲解元类及其应用,此篇为详解元类及其应用第一篇,下面开始今天的说明~~~ 1. 类也是对象 在⼤多数编程语⾔中,类就是⼀组⽤来描述如何⽣成⼀个对 ...
- 【python进阶】详解元类及其应用2
前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...
- Unity3D - 详解Quaternion类(二)
OK,不做引子了,接上篇Unity3D - 详解Quaternion类(一)走起! 四.Quaternion类静态方法 Quaternion中的静态方法有9个即:Angle方法.Dot方法.Euler ...
- Unity3D - 详解Quaternion类(一)
一.简介 Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念.四元数的乘法不符合交换律.从明确地角度而言,四元数是复数的不可交 ...
- (转)Linux命令详解-file
Linux命令详解-file 原文:https://www.cnblogs.com/Dodge/p/4278306.html file命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看 ...
- 详解 Paths类 与 Files类
在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...
- Kotlin——最详解的类(class)的使用
在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...
- IOC和AOP使用扩展之AOP详解实现类
摘要: “Depend on yourself” is what nature says to every man. Parents can help you. Teachers can hel ...
随机推荐
- OpenCV-Python 霍夫圈变换 | 三十三
学习目标 在本章中, 我们将学习使用霍夫变换来查找图像中的圆. 我们将看到以下函数:cv.HoughCircles() 理论 圆在数学上表示为(x−xcenter)2(y−ycenter)2=r2(x ...
- Nature重磅:华裔科学家成功解码脑电波,AI直接从大脑中合成语音
[导读]Nature发表华裔作者论文:通过解码大脑活动提升语音的清晰度,使用深度学习方法直接从大脑信号中产生口语句子,达到150个单词,接近正常人水平. 大脑活动能够解码成语音了. 说话似乎是一项毫不 ...
- c++中的多态机制
目录 1 背景介绍 2 多态介绍 2-1 什么是多态 2-2 多态的分类 2-3 动态多态成立的条件 2-4 静态联编和动态联编 2-5 动态多态的实现原理 2-6 虚析构函数 ...
- [vijos1725&bzoj2875]随机数生成器<矩阵乘法&快速幂&快速乘>
题目链接:https://vijos.org/p/1725 http://www.lydsy.com/JudgeOnline/problem.php?id=2875 这题是前几年的noi的题,时间比较 ...
- ANTLR随笔(二)
安装ANTLR 作者的电脑是MAC的操作系统macOS Catalina 10.15.2. 安装步骤后linux操作的系统的一样, Windows系统大致步骤一样,但是环境变量等配置有差别,作者很久没 ...
- CodeForces 277A 红娘问题(并查子集)
题目链接 思路如下 这题可以普通的并查集来做,我们把每个人认识的红娘,放到一个同一个集合里面,然后通过 for循环 遍历出现过的编号,看总共有几个集合,当集合的个数大于1的时候,需要的话费rmb的数量 ...
- 【tensorflow2.0】处理文本数据
一,准备数据 imdb数据集的目标是根据电影评论的文本内容预测评论的情感标签. 训练集有20000条电影评论文本,测试集有5000条电影评论文本,其中正面评论和负面评论都各占一半. 文本数据预处理较为 ...
- Blazor入门笔记(6)-组件间通信
1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 在使用B ...
- 原生的js操作实现通过对URL的监控获取参数
原生的js操作实现通过对URL的监控获取用户的操作信息 优化网站的时候,因为列表是用vue组件进行循环渲染,就出现了一个问题,单击跳转的问题,想了很多方案,使用js函数的方式面对这种情况并不乐观,想到 ...
- Mysql数据库卸载
Mysql数据库卸载的操作流程(Windows10): 1.停止mysql的所有服务 方法一:此电脑——管理——服务中查找到所有Mysql的服务,并停止. 方法二:cmd——net stop mysq ...