在讲解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. Python第五章-内置数据结构03-元组

    Python 内置的数据结构 三.元组(tuple) python 作为一个发展中的语言,也提供了其他的一些数据类型. tuple也是 python 中一个标准的序列类型. 他的一些操作和str和li ...

  2. TCP、UDP服务器模型 在网络程序里面,通常都是一

    TCP.UDP服务器模型 在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式. 目前最常用的服务器模型: 循环服务器:循环服务器在同一时刻只能响 ...

  3. OpenCV-Python 轮廓属性 | 二十三

    目标 在这里,我们将学习提取一些常用的物体属性,如坚实度,等效直径,掩模图像,平均强度等.更多的功能可以在Matlab regionprops文档中找到. (注:质心.面积.周长等也属于这一类,但我们 ...

  4. 使用Spring管理数据库事务

    在整个JavaWeb项目开发中,事务是用来开发可靠性网络应用程序的最关键部分.当应用程序与后端资源进行交互时,就会用到事务,这里的后端资源包括数据库.MQ.ERP等.而数据库事务是最常见的类型,而我们 ...

  5. 安装 MySQL 过程记录

    最近安装 MySQL 时 遇到了许多问题,记录一下安装过程以及遇到的问题. 第一步:在官网上下载适合自己版本的 MySQL,我选择的是 Windows 64 位免安装版的:    官网地址:https ...

  6. Controller与RestController的区别

    在使用Spring系列的框架的时候,相信几乎所有人都会遇见@Controller与@RestController两个注解,那么这两个注解到底有什么区别? 1. 标记有@RestController的类 ...

  7. python中装饰器的使用

    看个例子: # 定义装饰器函数 def log(func): """ 接受一个函数作为参数,并返回一个函数 :param func: :return: "&qu ...

  8. Light of future-冲刺Day 3

    目录 1.SCRUM部分: 每个成员进度 SCRUM 会议的照片 签入记录 代码运行截图 发布界面 用户浏览界面 管理员浏览界面 2.PM 报告: 时间表 燃尽图 任务总量变化曲线 每名成员的贡献比 ...

  9. 一夜搞懂 | JVM 线程安全与锁优化

    前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 一.为什么要学习内存模型与线程? 之前我们学习了内存模型和线程,了解了 JMM 和线程,初步 ...

  10. Java多线程并发工具类-信号量Semaphore对象讲解

    Java多线程并发工具类-Semaphore对象讲解 通过前面的学习,我们已经知道了Java多线程并发场景中使用比较多的两个工具类:做加法的CycliBarrier对象以及做减法的CountDownL ...