小白学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. 盘一盘 Thread源码

    线程是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务. 继承关系图 线 ...

  2. eclipse要修改的配置

    1. 修改 html的字体大小 window->preferences->General--> appearance--> Colors and fonts-->basi ...

  3. SpringBoot-Swagger整合zuul智能列表

    SpringBoot-Swagger整合zuul智能列表 简介 可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调. 现在基本都是多模块微服务化,每个服务都有这样的ui页 ...

  4. 22.文本框验证和外部url的调用

    面板可以右键固定到浏览器并且横向纵向都剧中 如果要在图片上进行点击或者其他操作 可以覆盖一个图片热区或者矩形(透明的)充当一个按钮的操作 这个提示的图片是默认隐藏的 通过右上角那个隐藏的勾 文本框右边 ...

  5. 驾驭git merge——git merge的规范化操作

    这两天负责将一个开发了较长时间,代码量数万行的C语言项目(A项目)的代码分支合并到主线.由于之前参与过一些其他项目分支收编时采用git merge引入问题的修改,个人从心理上对git merge有所抵 ...

  6. FPGA基础入门程序代码

    module flow_led( input sys_clk , //系统时钟,外部时钟50M input sys_rst_n, //系统复位,低电平有效 :] led //4个LED灯 ); //r ...

  7. 「2018-12-02模拟赛」T2 种树 解题报告

    2.种树(tree.pas/cpp/in/out) 问题描述: Fanvree 很聪明,解决难题时他总会把问题简单化. 例如,他就整天喜欢把图转化为树.但是他不会缩环,那他怎么转化呢? 这是一个有 n ...

  8. AcWing 240. 食物链 | 并查集

    传送门 题目描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形. A吃B, B吃C,C吃A. 现有N个动物,以1-N编号. 每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...

  9. word 发表博客

    发表博客大家可采用熟悉的word 编辑排版,然后发布博客.(这里我使用的是word 2013,其他版本大家可以自己测试) 使用word发布博客时,需要先配置一下: 1)单击文件---〉共享---〉发布 ...

  10. Linux 7.5 SSH服务和SFTP服务分离

    SFTP是SSH的一部分,SFTP没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像是一个服务器程序,而更像是一个客户端程序. ...