小白学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. Android 隐藏顶部菜单栏

    Android 隐藏状态栏 在Activity中: getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 在fragmen ...

  2. Python5_学习方法论

    学习路线: 1.对基础知识的全面掌握,熟悉IDE和基本概念,注重知识体系构建: 2.开发实战.在该过程中掌握各类框架知识.熟悉模块的使用.并根据问题深入学习: ==================== ...

  3. Appium中使用相对路径定位元素Xpath

    1.若页面该元素没有ID 2.找出该元素父类,并拷贝出父类的class(类名)和ID 3.点击搜索图标,进行查找 selector内容://android.widget.LinearLayout[@r ...

  4. 字符串format格式方式

    1.format后面都是个元组类型!!! 不一一对应则报错,比如少了一个替换的元素,format可以少但是不能多,一多就会报错 括号里可以加索引,看例2 可以用索引只取一个值,比如括号里都是{1} r ...

  5. Spring Boot + Docker + K8S 简单示例

    前言 最近看了看k8s,感觉用这个管理docker确实比自己写一坨脚本进步太多了,简直不是一个次原的东西. 看着k8s的官方文档随手写了个小Demo,一个基于k8s的spring boot服务. 代码 ...

  6. 为你写诗:3 步搭建 Serverless AI 应用

    作者 | 杜万(倚贤) 阿里巴巴技术专家 本文整理自 1 月 2 日社群分享,每月 2 场高质量分享,点击加入社群. 关注"阿里巴巴云原生"公众号,回复关键词 0102 即可下载本 ...

  7. Centos虚拟机安装指南

    按照文档安装有任何问题,欢迎随时留言 ·准备工作: linux发行版CentOS镜像下载地址: http://isoredirect.centos.org/centos/7/isos/x86_64/ ...

  8. Stripe支付对接

    一.由于文档丢失原因,我就直接上代码了. 这个Stripe支付可以支持多个币种,我下面就采用"HDK"来参照支付先上一个支付效果图  提示:先上代码,在说明博主自己理解的流程. 一 ...

  9. K8S中的ingress-nginx配置

    编辑在有道云笔记中,链接如下: http://note.youdao.com/noteshare?id=8d9ae3a1643e39714b36b58f7507baa2&sub=61C8C20 ...

  10. ASP.Net Core 3.0 中使用JWT认证

    JWT认证简单介绍     关于Jwt的介绍网上很多,此处不在赘述,我们主要看看jwt的结构.     JWT主要由三部分组成,如下: HEADER.PAYLOAD.SIGNATURE HEADER包 ...