小白学Java:File类

我们可以知道,存储在程序中的数据是暂时的,在程序终止的时候,存储在程序中的数据就会丢失。我们通常为了永久地保存在程序中创建地数据,需要将它们存储到磁盘上或者其他永久存储设备的文件中,这些文件之后可以被其他的程序传输和读取。

而java.io包下的File实用类库就可以被运用操作这些文件,File封装了在用户机器上处理文件系统所需要的所有功能。

官方给的定义是:代表的是文件或者目录路径名的抽象。

This class presents an abstract, system-independent view of hierarchical pathnames.

可以说,这个类提供了一个抽象的、与系统无关的层次路径名视图。

不同风格的分隔符

  • 在windows系统中,用\间隔目录,用;间隔不同的路径。
  • 在Linux或unix中,用/间隔目录,用:间隔不同的路径。

java为了屏蔽不同操作系统的差异性,提供了File.separator表示间隔符,提供了File.pathSeparator间隔不同路径。当然这两个是String类型,另外两个为Char类型,作用相同。

绝对与相对路径

绝对路径(absolute):以盘符或者/开头的路径。

相对路径(relative):相较于某个路径下才指明的路径。

在IDEA的main()方法中测试,相对路径是当前的Project下。

  1. File file = new File("newFile");
  2. System.out.println(file.getAbsolutePath());
  3. //E:\java_learning\project01\newFile

File类常用方法

常用构造器

  1. File(String pathname) //传入一个路径名(文件or目录)
  2. File(String parent, String child) //在目录parent下创建一个子路径对象
  3. File(File parent, String child) //在目录parent下创建一个子路径对象,区别是parent本身就是File对象

下面是创建File对象的一个例子,需要注意的是,创建对象并不意味着创建了一个真实的文件,而是一种抽象,可以通过这个File对象进行相应的操作。

  1. //以绝对路径名作为参数,创建一个File对象。
  2. File file = new File("D:\\newFile.txt");

我们之前提到,windows系统中目录层级之间的分隔符是反斜杠\,Java中反斜杠是一个转义字符,所以要表示\,需要写成\\

创建方法

下面的三个方法用以创建文件或者创建目录,都有返回的boolean值。

  • 创建文件 public boolean createNewFile()

    用以创建文件,创建成功返回true。但是如果该文件已经存在,则返回false。
  • 创建目录 public boolean mkdir()

    用以创建文件目录,创建成功返回true。但是需要注意的是:同样的,如果目录已经存在,则返回false,如果该文件目录的上层目录不存在,也不会创建。
  • 创建多级目录 public boolean mkdirs()

    同样是创建文件目录,如果已经存在,则返回false。但是和上面不同的是,如果上层目录不存在,它会一并创建

需要注意:如果创建File对象时,传入的路径名没有指定盘符,则为相对路径名,在项目路径下。

判断方法

下面的方法都是以public boolean修饰的方法,用以判断。

获取方法

  • 关于getPathgetAbsolutePath产生的疑惑?为啥这两个产生的结果相同呢?

于是我进行了新的测试:

  1. File file = new File("relativeFile");
  2. file.getAbsolutePath(); //E:\java_learning\project01\relativeFile
  3. file.getPath(); //relativeFile

这次我以相对路径名作为参数传入,结果显而意见。getAbsolutePath返回的是默认带着项目路径的绝对路径名,而getPath只是将传入的路径名原原本本地返回。

  • 关于产生的文件列表,其实还有list()方法,只不过它的返回值类型是String[]。list()和listFiles()都有传入参数是FilenameFilter接口类型的重载方法。
  1. public interface FilenameFilter {
  2. boolean accept(File dir, String name);
  3. }

我们可以通过匿名内部类,对产生的列表进行操作:

  1. //打印该目录下的java文件
  2. File path = new File("module01\\src\\com\\my\\FileTest");
  3. File[] list;
  4. //通过匿名内部类返回FilenameFilter的引用
  5. list = path.listFiles(new FilenameFilter() {
  6. @Override
  7. public boolean accept(File dir, String name) {
  8. //选择接收.java结尾的文件
  9. return name.endsWith(".java");
  10. }
  11. });
  12. for(File l:list)
  13. System.out.println(l.getName());

命名方法

public boolean renameTo(File dest)

把文件重命名为指定地文件路径,如果成功,返回true。

删除方法

public boolean delete()

删除文件或者目录。

  • 一旦删除成功,无法在回收站复原,是不可逆的。
  • 如果待删除的目录里面包含着文件或者子目录,则其不能被删除,我们可以通过下面的方法递归删除包含内容的目录。
  • 删除完整的目录。
  1. /**
  2. * 静态方法,删除完整的目录
  3. * @param file 传入File对象
  4. */
  5. public static void deleteDirectory(File file){
  6. //判断file对象是文件还是目录
  7. if(file.isDirectory()){
  8. //如果是目录,获取子文件和子目录列表
  9. File[] fs = file.listFiles();
  10. //遍历数组
  11. for(File f :fs){
  12. //递归删除
  13. deleteDirectory(f);
  14. }
  15. }
  16. //最后的无论是啥,都需要删除
  17. file.delete();
  18. }

小白学Java:File类的更多相关文章

  1. 小白学Java:RandomAccessFile

    目录 小白学Java:RandomAccessFile 概述 继承与实现 构造器 模式设置 文件指针 操作数据 读取数据 read(byte b[])与read() 追加数据 插入数据 小白学Java ...

  2. 小白学Java:包装类

    目录 小白学Java:包装类 包装类的继承关系 创建包装类实例 自动装箱与拆箱 自动装箱 自动拆箱 包装类型的比较 "=="比较 equals比较 自动装箱与拆箱引发的弊端 自动装 ...

  3. 小白学Java:老师!泛型我懂了!

    目录 小白学Java:老师!泛型我懂了! 泛型概述 定义泛型 泛型类的定义 泛型方法的定义 类型变量的限定 原生类型与向后兼容 通配泛型 非受限通配 受限通配 下限通配 泛型的擦除和限制 类型擦除 类 ...

  4. 小白学Java:迭代器原来是这么回事

    目录 小白学Java:迭代器原来是这么回事 迭代器概述 迭代器设计模式 Iterator定义的方法 迭代器:统一方式 Iterator的总结 小白学Java:迭代器原来是这么回事 前文传送门:Enum ...

  5. 小白学Java:奇怪的RandomAccess

    目录 小白学Java:奇怪的RandomAccess RandomAccess是个啥 forLoop与Iterator的区别 判断是否为RandomAccess 小白学Java:奇怪的RandomAc ...

  6. 小白学Java:内部类

    目录 小白学Java:内部类 内部类的分类 成员内部类 局部内部类 静态内部类 匿名内部类 内部类的继承 内部类有啥用 小白学Java:内部类 内部类是封装的一种形式,是定义在类或接口中的类. 内部类 ...

  7. 小白学Java:I/O流

    目录 小白学Java:I/O流 基本分类 发展史 文件字符流 输出的基本结构 流中的异常处理 异常处理新方式 读取的基本结构 运用输入与输出 文件字节流 缓冲流 字符缓冲流 装饰设计模式 转换流(适配 ...

  8. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

  9. Java File 类的使用方法详解

    Java File类的功能非常强大,利用Java基本上可以对文件进行所有的操作.本文将对Java File文件操作类进行详细地分析,并将File类中的常用方法进行简单介绍,有需要的Java开发者可以看 ...

随机推荐

  1. 开包即食的教程带你浅尝最新开源的C# Web引擎 Blazor

    在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor ,将.NET带回到浏览器. 这个小惊喜, 迅速的在dotnet开发者中间传开了. ...

  2. Git 删除大文件的方法

    git 仓库中删除历史大文件   git 仓库中删除历史大文件 在git中增加了一个很大的文件,而且被保存在历史提交记录中,每次拉取代码都很大,速度很慢.而且用删除 提交历史记录的方式不是很实际. 以 ...

  3. Windows 服务安装与卸载 (通过 Sc.exe)

    1. 安装 新建文本文件,重命名为 ServiceInstall.bat,将 ServiceInstall.bat 的内容替换为: sc create "Verity Platform De ...

  4. 二、搜索class文件

    一.类路径 https://blog.csdn.net/THMAIL/article/details/70025366 二.准备工作 在%GOPATH%\src\jvmgo下创建classpath文件 ...

  5. 91.requests&BeautifulSoup

    转载:https://www.cnblogs.com/wupeiqi/articles/6283017.html equests Python标准库中提供了:urllib.urllib2.httpli ...

  6. jsqlparser和calcite和druid功能对比

    需求分析:(用其它方法替代metabase中的某些功能)功能1.通过对sql查询语句的分析,得到所有表名,以及所有表的字段名,字段类型,字段注解信息.功能2.在sql语句执行查询前,校验sql语句是否 ...

  7. 用c++ 给易语言写支持库学习记录

    废话我就不对说 直接开始 易语言官方下载的易语言安装路径下 有一个SDK文件夹 我们点进入cpp文件夹里面提供是c++的SDK elib文件夹里就是sdk 我们新建一个win32项目 这里我用的是VS ...

  8. vc++简单的vector动态数组实现

    #ifndef __MYVECTOR__ #define __MYVECTOR__ #include <Windows.h> #define SUCCESS 1 // 成功 #define ...

  9. $AT2292\ Division\ into\ Two$ $dp$

    正解:$dp$ 解题报告: 传送门$QwQ$ 不妨令$A\geq B$,于是先$sort$然后预处理判下如果有三个元素两两差都小于$B$的就直接$GG$了. 然后考虑对集合$X$进行$dp$,剩下的数 ...

  10. Arrays.asList 返回值类型

    public static void main(String[] args) { Integer[] datas = {1,2,3,4,5}; List<Integer> list = A ...