一、File类定义

1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类

2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较

public class File implements Serializable,Comparable<File>
{
}

二、File类实例域

1) path :封装的String类型变量,代表了文件的路径

 private String path;public String getPath()
{return path;
}

2) separatorChar:静态常量,代表了运行该程序的系统的路径分隔符,windows系统为"\" ,linux系统为“/”

 public static void main(String[] args)
{System.out.println(File.separator); //在windows系统下运行结果为\}

3)  separator :静态常量,是由separatorChar扩展而来的字符串型常量,运行结果和separatorChar一样

public static final String separator = "" + separatorChar;

4)pathSeparatorChar :静态常量,代表用于分割多个路径的系统分隔符。 在UNIX系统上,此字符为':'而 Windows系统上它是';'

 public static void main(String[] args)
{System.out.println(File.pathSeparator); //运行结果为;
}

5)pathSeparator: 静态常量,由pathSeparatorChar扩展而来的字符串,运行结果和pathSeparatorChar一样

 public static final String pathSeparator = "" + pathSeparatorChar;

三、File类构造函数

注意:构造函数只是创建一个File实例,并没有以文件做读取等操作,因此路径即使是错误的,也可以创建实例不报错

1)通过给定的字符串路径(一般是文件的绝对路径)转为抽象路径名用来创建File实例,当传入null时会抛出NullPointerException空异常错误

    public File(String pathname) {}
public class Test2
{public static void main(String[] args)
{File file=new File("xxx");System.out.println(file.getPath());  //路径结果就是xxx
}
}

2)从父路径名字符串和子路径名字符串(一般是相对父类的相对路径)创建新的File实例

public File(String parent, String child) {}

2.1) 若子路径child为Null,会抛出NullPointerException空异常错误

2.2) 当父路径为Null时,会以子路径child作为绝对路径创建实例,等同于调用第一个File(String child )效果一样

public class Test2
{public static void main(String[] args)
{String parent=null;File file=new File(parent,"xxx");System.out.println(file.getPath());  //路径结果就是xxx
}
}

2.3) 当父路径不为空时,会以父路径作为目录,子路径作为父路径下的目录或者文件名,最后得到的实例对象的路径就是父路径和子路径的组合

public class Test2
{public static void main(String[] args){String parent = "E:/test";File parentFile= new File(parent);String child = "E:/test/1.txt";File file = new File(parentFile, child);System.out.println(file.getPath()); // 路径结果就是E:\test\E:\test\1.txt}
}

3)通过父路径File实例对象和子路径字符串创建新的File实例,等同于上面的方法中把父路径字符串创建File实例然后传入一样

public class Test2
{public static void main(String[] args){String parent = "E:/test";File parentFile= new File(parent);String child = "E:/test/1.txt";File file = new File(parentFile, child);System.out.println(file.getPath()); // 路径结果就是E:\test\E:\test\1.txt}
}

4)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例,这个方法暂时没有看懂,需要查阅资料加深理解

public File(URI uri) {}

四、File类中的各种常用方法

下面是我E盘下test文件夹的文件情况,以此作为案例

1)获取实例对象代表的文件名字(包含文件后缀)

public String getName()}
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.getName()); // 结果是1.txtSystem.out.println(file2.getName()); // 结果是异常1.jpgSystem.out.println(file3.getName()); // 结果是xxx}
}

2)获取实例对象代表的文件上级目录

public String getParent()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.getParent()); // 结果是E:\testSystem.out.println(file2.getParent()); // 结果是E:\testSystem.out.println(file3.getParent()); // 结果是null}
}

3)获取实例对象的父项的实例对象,如果此路径名未指定父目录,则返回null;也就是获取对象的上级目录然后再实例化一个对象

public File getParentFile()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.getParentFile()); // 结果是E:\testSystem.out.println(file2.getParentFile()); // 结果是E:\testSystem.out.println(file3.getParentFile()); // 结果是null}
}

4)获取实例对象代表的文件的实际路径

public String getPath()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.getPath()); // 结果是E:\test\1.txtSystem.out.println(file2.getPath()); // 结果是E:\test\异常1.jpgSystem.out.println(file3.getPath()); // 结果是xxx}
}

5)检测该实例对象代表的文件的路径是否是绝对路径(windows系统中路径是以驱动盘开始的就是绝对路径)

public boolean isAbsolute()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.isAbsolute()); // 结果是trueSystem.out.println(file2.isAbsolute()); // 结果是trueSystem.out.println(file3.isAbsolute()); // 结果是false}
}

6)获取实例对象代表的文件的绝对路径

public String getAbsolutePath()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.getAbsolutePath()); // 结果是E:\test\1.txtSystem.out.println(file2.getAbsolutePath()); // 结果是E:\test\异常1.jpgSystem.out.println(file3.getAbsolutePath()); // 结果是D:\workspace\lettcode\xxx(编译器的工作空间作为解析目录了)}
}

7)实例对象代表的文件是否存在

public boolean exists()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.exists()); // 结果是trueSystem.out.println(file2.exists()); // 结果是trueSystem.out.println(file3.exists()); // 结果是false}
}

8)检测实例对象代表的是否是文件

public boolean isFile()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.isFile()); // 结果是trueSystem.out.println(file2.isFile()); // 结果是trueSystem.out.println(file3.isFile()); // 结果是false}
}

9)检测实例对象代表的是否是目录

public boolean isDirectory()
public class Test2
{public static void main(String[] args) throws URISyntaxException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.isDirectory()); // 结果是falseSystem.out.println(file2.isDirectory()); // 结果是falseSystem.out.println(file3.isDirectory()); // 结果是false}
}

10)创建新文件--当且仅当实例对象代表的文件不存在时才可以创建新文件

public boolean createNewFile()  throws IOException
public class Test2
{public static void main(String[] args) throws  IOException{File file = new File("E:/test/1.txt");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.createNewFile()); // 结果是false,已经存在无法创建System.out.println(file2.createNewFile()); // 结果是false,已经存在无法创建System.out.println(file3.createNewFile()); // 结果是true,不存在可以创建}
}

创建的XXX文件的目录地址是以编译器的工作空间为上级目录加上创建实例对象的时候的路径名形成最后的路径

11)删除实例对象代表的文件或目录,当代表目录时,必须目录下为空才可以删除

public boolean delete()
public class Test2
{public static void main(String[] args) throws  IOException{File file = new File("E:/test/");File file2 = new File("E:/test/异常1.jpg");File file3 = new File("xxx"); // 错误路径System.out.println(file.delete()); // 结果是false,目录无法删除System.out.println(file2.delete()); // 结果是true,文件可以删除System.out.println(file3.delete()); // 结果是true,文件可以删除}
}

执行方法后的test文件如下:

12)根据实例对象的路径名创建目录(若目录已存在,则false;若路径是文件,则fasle;若路径的上级目录不存在则false)

public boolean mkdir()
public class Test2
{public static void main(String[] args) throws IOException{File file = new File("E:/test1/");File file2 = new File("E:/test2/异常1.jpg");File file3 = new File("E:/ceshi");File file4 = new File("E:/ceshi2/2018");System.out.println(file.mkdir()); // false 因为test1目录已存在System.out.println(file2.mkdir()); // false,因为上级目录test2不存在System.out.println(file3.mkdir()); // true,因为ceshi目录不存在且是上级目录是E盘存在的System.out.println(file4.mkdir()); // false,因为ceshi2目录不存在,所以不成功}
}

13)根据实例对象的路径创建目录,包括创建那些必须的且不存在的父级目录

public boolean mkdirs()
public class Test2
{public static void main(String[] args) throws IOException{File file = new File("E:/test1/");File file2 = new File("E:/test2/异常1.jpg");File file3 = new File("E:/ceshi");File file4 = new File("E:/ceshi2/zhagnsan");System.out.println(file.mkdirs()); // false 因为test1目录已存在System.out.println(file2.mkdirs()); // true,因为目录不存在所以可以创建,但注意生成的异常1.jpg是文件夹不是图片System.out.println(file3.mkdirs()); // true,因为目录不存在所以可以创建System.out.println(file4.mkdirs()); // true,因为目录不存在所以可以创建}
}

14) 获取实例对象代表的文件下的各级文件名和目录名,返回一个字符串数组

public String[] list()

1.  当实例对象代表的是文件不是目录时,返回NUll对象

2.  获取的是该目录下的文件名和目录名,并不包含该目录名称和其上级目录名称

3.  字符串数组中都是文件名或目录名并不是路径名

4.  字符串中的元素并不是按照实际系统中目录下的顺序排列的

例如E盘test文件夹里面是这样的

调用list方法

public class Test2
{public static void main(String[] args) throws IOException{File file2 = new File("E:/test");String[] list = file2.list();for (int i = 0; i < list.length; i++){System.out.println(list[i]); // 结果为1.txt、xxx、工资表.xls、异常1.jpg、第一个目录、第三个目录}}
}

15)获取实例对象代表的文件下的各级文件名和目录名并指定过滤器进行过滤,返回一个字符串数组

public String[] list(FilenameFilter filter)

1. 过滤器是FilenameFilter类对象,当传入null时,效果和list()方法一样

    2. 过滤器是指过滤掉不符合名称的名字

    3. FilenameFilter 是一个接口,因此需要自己新建一个类来实现该接口作为参数传入进去

    4.仔细研究方法的源码可以发现,所谓过滤就是要重写FilenameFilter的accept方法并在方法中过滤

public String[] list(FilenameFilter filter) {String names[] = list();if ((names == null) || (filter == null)) {return names;}List<String> v = new ArrayList<>();for (int i = 0 ; i < names.length ; i++) {if (filter.accept(this, names[i])) {  //必须重写accept方法,并在方法内对传入的name进行判定是否合乎过滤条件v.add(names[i]);}}return v.toArray(new String[v.size()]);}

5. 例如我们只要后缀名是txt的文件名称,那么可以按照以下逻辑来处理

创建FilenameFilter的实现类TxtFilter并重写accept方法,在方法中进行判定

public class TxtFilter implements FilenameFilter
{@Overridepublic boolean accept(File dir, String name){if(name.endsWith(".txt")){return true;}return false;}}

但是仔细思考,如果我还需要过滤.java结束的呢?难道又去重新创建实现类?因此可以用过滤条件作为构造参数传入构造方法中初始化其变量,这样就是可变的

public class TxtFilter implements FilenameFilter
{private String FilterName; // 作为过滤器名称变量public TxtFilter(String FilterName){this.FilterName = FilterName; // 初始化构造过滤器名称,这样就不用每次都创建新类}public String getFilterName(){return FilterName; // 公有的域访问器方法,提供接口获取}@Overridepublic boolean accept(File dir, String name){String fileterNameString = this.getFilterName(); // this代表着调用accept方法的变量if (name.endsWith(fileterNameString)){return true;}return false;}}

我们测试下结果

public class Test2
{public static void main(String[] args) throws IOException{File file2 = new File("E:/test");TxtFilter filter=new TxtFilter(".txt"); //过滤器,只需要.txt结尾的String[] list = file2.list(filter);for (int i = 0; i < list.length; i++){System.out.println(list[i]); // 结果为1.txt}}
}

JAVA基础知识之File类相关推荐

  1. JAVA基础知识回顾-----File类-----实用

    所在包:java.io 1.文件 Java对文件管理,主要用到了IO包下的File类:主要针对文件及文件目录名称的管理,不包括文件的内容        ①声明 Java代码   public clas ...

  2. java基础知识-对象和类

    前言: 因为要准备Java面试,所有将java基础知识点重新复习一遍,主要笔记来源于菜鸟教程和java核心技术的书籍中,也有一些博客上的资料(这些只供我个人学习使用) Java 对象和类 对象:对象是 ...

  3. 诚之和:Java基础知识枚举Enum类介绍以及案例使用详解

    Java语言中的数据类型可以分为两大类,分别是基本数据类型和引用数据类型.本篇文章要介绍的枚举,就是属于Java的引用数据类型.下面,将为大家详细介绍Java中的枚举,以及具体的使用案例. 一.文章序 ...

  4. 【java基础知识】日期类

    目录 1.Date类 构造方法 2.SimpleDateFormat类 format() 日期工具案例 3.Calendar类 二月天案例 1.Date类 构造方法 Date d1 = new Dat ...

  5. Java基础知识(二)(Object类的常用方法、日期时间类、System类、StringBuilder类、包装类、Collection集合、Iterator迭代器、泛型、list集Set接口...)

    文章目录 Java基础知识(二) 1.Object类的常用方法 1.1 toString方法 1.2 equals方法 1.3 Objects类 2.日期时间类 2.1 Date类 2.2 DateF ...

  6. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  7. java 反射类 spring_学习Spring必学的Java基础知识(1)----反射

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓"登高必自卑,涉远必自迩".以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系 ...

  8. java基础知识之初识java

    java基础知识之初识java JAVA基础课后总结 一 1.计算机程序 定义:程序(Program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合. 2.指令 定义:指令就是指示机 ...

  9. java 基础知识总结

    Java基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java语言代码把思 ...

最新文章

  1. grafana官方使用文档_使用 Loki 采集微服务日志
  2. “2018中国AI英雄风云榜”年度人物榜:“AI天才”何恺明
  3. js中iframe访问父页的方法
  4. xml解析案例:一个简单的学生管理系统
  5. 中移动完成透镜天线远距覆盖和降本增效试点
  6. c/c++ 字符串分割
  7. java设计模式之——代理模式
  8. Git小乌龟合并代码
  9. FileZilla Server + FlashFXP 快速搭建FTP服务
  10. 单节1A锂电池充电芯片
  11. Eterm协议破解,Java后端二次开发,实现ERP系统提取票号
  12. 天梯赛 L2-001 紧急救援 (25 分)详细注释
  13. 在路上●我的年轻●勇往直前●匆匆十年
  14. EMERSON艾默生AMS巡检仪维修TREX通讯器维修注意事项
  15. 统计学学习日记:L6-离散趋势分析之总体方差和标准差
  16. 为什么计算机中的负数要用补码表示?
  17. 技术丨小团队的微服务之路
  18. 移动互联网的5大思维和10个法则
  19. HED80A12/350K14 压力开关
  20. 备战软考(6) 2014年度下半年软考备战分析报告

热门文章

  1. Css中用Google Fonts ,国内使用方法
  2. 班章管家可靠安全月入5k怎样理财?怎样合理财脱节月光族?
  3. dubbo快速使用demo
  4. 框架-Hibernate
  5. 传智播客严把教学质量成就我们梦想
  6. rds下载备份集在另外一台机器上恢复并应用binlog日志
  7. memtester测试——Linux内存测试工具
  8. 中标麒麟使用centos源_Linux各系统配置yum,apt源
  9. 4K/8K的雷电(thunderbolt)解决方案
  10. 闲鱼自动化软件——筛选/发送系统 V18已经过测试,可以使用了