小白学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下。

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

File类常用方法

常用构造器

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

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

//以绝对路径名作为参数,创建一个File对象。
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产生的疑惑?为啥这两个产生的结果相同呢?

于是我进行了新的测试:

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

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

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

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

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

命名方法

public boolean renameTo(File dest)

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

删除方法

public boolean delete()

删除文件或者目录。

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

小白学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. 洪强宁:宜信PaaS平台基于Calico的容器网络实践

    洪强宁:宜信PaaS平台基于Calico的容器网络实践   本文内容来自由七牛云主办的ECUG Con,独家授权InfoQ整理完成 容器云面临的网络挑战 在传统的IDC的架构里面网络是很重要的事情,在 ...

  2. slim中的请求头

    请求头 每个 HTTP 请求都有请求头.这些元数据描述了 HTTP 请求,但在请求体中不可见.Slim 的 PSR 7 请求对象提供了几个检查请求头的方法. 获取所有的请求头,返回一个数组:getHe ...

  3. 深入浅出Java并发中的CountDownLatch

      1. CountDownLatch 正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行.在Java并发中 ...

  4. 第二阶段:1.流程图:12.AXURE绘制页面流程图

    注意的事项: 完整的页面流程图

  5. while Ture怎么退出全部

    while True: #这是一个死循环 如果想要quit出去只能一层一层的退出 比如如果在第三层输入quit会回到第二层 那么有什么方法能够在第三层就退出全部? print("level1 ...

  6. 基于 HTML5 + WebGL 的无人机 3D 可视化系统

    前言 近年来,无人机的发展越发迅速,既可民用于航拍,又可军用于侦察,涉及行业广泛,也被称为“会飞的照相机”.但作为军事使用,无人机的各项性能要求更加严格.重要.本系统则是通过 Hightopo 的   ...

  7. 008 Ceph集群数据同步

    介绍,目前已经创建一个名为ceph的Ceph集群,和一个backup(单节点)Ceph集群,是的这两个集群的数据可以同步,做备份恢复功能 一.配置集群的相互访问 1.1 安装rbd mirror rb ...

  8. Python学习3月5号【python编程 从入门到实践】---》笔记

    ---恢复内容开始--- 1.变量 一.只能包含字母.数字.下划线.****不能以数字开头作变量 二.不能包含空格, 三.不要将python关键字和函数名用作变量名 四.最好能有描述性和简短的特征 五 ...

  9. 洛谷$P2605\ [ZJOI2010]$基站选址 线段树优化$dp$

    正解:线段树优化$dp$ 解题报告: 传送门$QwQ$ 难受阿,,,本来想做考试题的,我还造了个精妙无比的题面,然后今天讲$dp$的时候被讲到了$kk$ 先考虑暴力$dp$?就设$f_{i,j}$表示 ...

  10. 【一起学源码-微服务】Ribbon 源码四:进一步探究Ribbon的IRule和IPing

    前言 前情回顾 上一讲深入的讲解了Ribbon的初始化过程及Ribbon与Eureka的整合代码,与Eureka整合的类就是DiscoveryEnableNIWSServerList,同时在Dynam ...