在讲解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类的更多相关文章

  1. unity3D游戏开发之详解Animation类和Animator类

    详解Animator类和Animation类 链接: http://wenku.baidu.com/link?url=SiaUYcdrNYjOYrWVDJSKGAYdJOntMTOhsVJtyBk2i ...

  2. 【python进阶】详解元类及其应用1

    前言 元类在python中是很重要的一部分,我将分两次去讲解元类及其应用,此篇为详解元类及其应用第一篇,下面开始今天的说明~~~ 1. 类也是对象 在⼤多数编程语⾔中,类就是⼀组⽤来描述如何⽣成⼀个对 ...

  3. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  4. Unity3D - 详解Quaternion类(二)

    OK,不做引子了,接上篇Unity3D - 详解Quaternion类(一)走起! 四.Quaternion类静态方法 Quaternion中的静态方法有9个即:Angle方法.Dot方法.Euler ...

  5. Unity3D - 详解Quaternion类(一)

    一.简介 Quaternion又称四元数,由x,y,z和w这四个分量组成,是由爱尔兰数学家威廉·卢云·哈密顿在1843年发现的数学概念.四元数的乘法不符合交换律.从明确地角度而言,四元数是复数的不可交 ...

  6. (转)Linux命令详解-file

    Linux命令详解-file 原文:https://www.cnblogs.com/Dodge/p/4278306.html file命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看 ...

  7. 详解 Paths类 与 Files类

    在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...

  8. Kotlin——最详解的类(class)的使用

    在任何一门面向对象编程的语言里,类(class)是非常基础.但也是非常重要的一项组成,通俗的说就是万般皆对象,而所说的对象就是我们生成的类.Kotlin也是如此,下面详细为大家介绍Kotlin中的类的 ...

  9. IOC和AOP使用扩展之AOP详解实现类

    摘要:   “Depend on yourself” is what nature says to every man.  Parents can help you. Teachers can hel ...

随机推荐

  1. OpenCV-Python 霍夫圈变换 | 三十三

    学习目标 在本章中, 我们将学习使用霍夫变换来查找图像中的圆. 我们将看到以下函数:cv.HoughCircles() 理论 圆在数学上表示为(x−xcenter)2(y−ycenter)2=r2(x ...

  2. Nature重磅:华裔科学家成功解码脑电波,AI直接从大脑中合成语音

    [导读]Nature发表华裔作者论文:通过解码大脑活动提升语音的清晰度,使用深度学习方法直接从大脑信号中产生口语句子,达到150个单词,接近正常人水平. 大脑活动能够解码成语音了. 说话似乎是一项毫不 ...

  3. c++中的多态机制

    目录 1  背景介绍 2  多态介绍 2-1  什么是多态 2-2  多态的分类 2-3  动态多态成立的条件 2-4  静态联编和动态联编 2-5  动态多态的实现原理    2-6   虚析构函数 ...

  4. [vijos1725&bzoj2875]随机数生成器<矩阵乘法&快速幂&快速乘>

    题目链接:https://vijos.org/p/1725 http://www.lydsy.com/JudgeOnline/problem.php?id=2875 这题是前几年的noi的题,时间比较 ...

  5. ANTLR随笔(二)

    安装ANTLR 作者的电脑是MAC的操作系统macOS Catalina 10.15.2. 安装步骤后linux操作的系统的一样, Windows系统大致步骤一样,但是环境变量等配置有差别,作者很久没 ...

  6. CodeForces 277A 红娘问题(并查子集)

    题目链接 思路如下 这题可以普通的并查集来做,我们把每个人认识的红娘,放到一个同一个集合里面,然后通过 for循环 遍历出现过的编号,看总共有几个集合,当集合的个数大于1的时候,需要的话费rmb的数量 ...

  7. 【tensorflow2.0】处理文本数据

    一,准备数据 imdb数据集的目标是根据电影评论的文本内容预测评论的情感标签. 训练集有20000条电影评论文本,测试集有5000条电影评论文本,其中正面评论和负面评论都各占一半. 文本数据预处理较为 ...

  8. Blazor入门笔记(6)-组件间通信

    1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 在使用B ...

  9. 原生的js操作实现通过对URL的监控获取参数

    原生的js操作实现通过对URL的监控获取用户的操作信息 优化网站的时候,因为列表是用vue组件进行循环渲染,就出现了一个问题,单击跳转的问题,想了很多方案,使用js函数的方式面对这种情况并不乐观,想到 ...

  10. Mysql数据库卸载

    Mysql数据库卸载的操作流程(Windows10): 1.停止mysql的所有服务 方法一:此电脑——管理——服务中查找到所有Mysql的服务,并停止. 方法二:cmd——net stop mysq ...