1、File文件类

File类(描述具体文件或文件夹的类):是唯一一个与文件本身操作有关的程序类,可完成文件的创建、删除、取得文件信息等操作。但不能对文件的内容进行修改。

(1)File类的基本使用

File类只用于创建文件文身并不对其内容做任何处理。

Java.Io.File是一个普通的类,直接产生实例化对象,要想得到实例化对象则需用到其提供的构造方法。

A. File类中提供的构造方法

public File(String pathname):其中pathname位要传入对象的绝对路径。

public File(String parent, String child):设置父路径和子路径。

B. File类中的普通方法

判断文件是否存在:public boolean exists()

创建文件:public boolean createNewFile()

删除文件:public boolean delete()


  1. package myIO;
  2. import java.io.File;
  3. import java.io.IOException;
  4. public class Test {
  5. public static void main(String[] args) {
  6. //定义要操作文件的路径
  7. File file = new File("C:\\Users\\lenovo\\Desktop\\TestIo.java");
  8. //查找指定文件是否存在(不存在返回false,反之亦然)
  9. System.out.println(file.exists());
  10. try {
  11. //若指定文件不存在,则创建新文件
  12. file.createNewFile();
  13. //创建文件后打印文件是否存在
  14. System.out.println(file.exists());
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. //对文件进行删除
  19. file.delete();
  20. //进行删除操作后打印文件是否存在
  21. System.out.println("执行删除操作后文件存在与否?");
  22. System.out.println(file.exists());
  23. }
  24. }


  1. /*
  2. * 实现程序:文件不存在则创建,存在则删除
  3. * */
  4. public class Test{
  5. public static void main(String[] args) throws IOException {
  6. File file = new File("C:\\\\Users\\\\lenovo\\\\Desktop\\\\TestIo.java");
  7. if(!file.exists()) {
  8. file.createNewFile();
  9. }else {
  10. file.delete();
  11. }
  12. }
  13. }

上述方法应该是最简化的文件处理操作了,但是仍然存在问题:如Linux下文件路径的分隔符用“/”,而在windows下则用的是“\”;但是即便这样也不影响跨平台性,我们可以引入File类的一个常量"public static final String separator "来对其描述。


  1. public class Test{
  2. public static void main(String[] args) throws IOException {
  3. //利用File类的常量来设置不同操作系统下的分隔符
  4. //separator由不同操作系统下的JVM来决定到底是"/"还是"\"
  5. String singal = File.separator;
  6. File file = new File("C"+singal+"Users"+singal+"lenovo"
  7. +singal+"Desktop"+singal+"TestIO.java");
  8. System.out.println(file.exists());
  9. if(file.exists()) {
  10. file.createNewFile();
  11. }else {
  12. file.delete();
  13. }
  14. }
  15. }

在Java中要进行文件的处理操作是要通过本地操作系统支持的,在这之中如果操作的是同名文件,就可能出现延迟的问题。(开发之中尽可能避免文件重名问题)

(2)目录操作

取得父路径:public String getParent() 返回当前的父路径

取得父File对象:public File getParentFile() 返回当前的父File对象

创建父目录: public boolean mkdirs() 有多少级就创建多少级


  1. public class Test{
  2. public static void main(String[] args) throws IOException {
  3. String singal = File.separator;
  4. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
  5. +singal+"TestIO.java");
  6. if(!file.getParentFile().exists()) {
  7. file.mkdirs();
  8. }
  9. }
  10. }

若使用file.mkdirs()创建,则创建的为文件夹。而若使用file。getParentFile.mkdirs()创建时则为目录。


  1. public class Test{
  2. public static void main(String[] args) throws IOException {
  3. String singal = File.separator;
  4. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
  5. +singal+"TestIO.java");
  6. //判断父目录是否存在
  7. if(!file.getParentFile().exists()) {
  8. file.getParentFile().mkdirs();
  9. }
  10. }
  11. }


  1. public class Test{
  2. public static void main(String[] args) throws IOException {
  3. String singal = File.separator;
  4. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
  5. +singal+"TestIO.java");
  6. //返回当前的父路径
  7. System.out.println("返回当前的父路径");
  8. System.out.println(file.getParent());
  9. //返回当前父File对象
  10. System.out.println("返回当前父File");
  11. System.out.println(file.getParentFile());
  12. //判断父目录是否存在
  13. if(!file.getParentFile().exists()) {
  14. //创建多级目录
  15. file.getParentFile().mkdirs();
  16. }
  17. //若文件存在则删除
  18. if(file.exists()) {
  19. file.delete();
  20. }else {
  21. //文件不存在,则创建新文件
  22. file.createNewFile();
  23. }
  24. }

()取得文件信息

判断路径是否是文件: public boolean isFile()

判断路径是否是目录: public boolean isDirectory()

取得文件大小(字节):  public long length()

最后一次修改日期 : public long lastModified()


  1. /*
  2. * 取得文件信息
  3. * */
  4. public class Test{
  5. public static void main(String[] args) {
  6. String singal = File.separator;
  7. File file = new File("G:"+singal+"lemon"+singal+"javaIO"
  8. +singal+"TestIO.java");
  9. //判断上级目录是否为文件
  10. System.out.println("上级目录是否为文件?");
  11. System.out.println(file.getParentFile().isFile());
  12. //判断当前目录是否为文件
  13. System.out.println("该目录下是否为文件?");
  14. System.out.println(file.isFile());
  15. //查看当前对象是否为路径
  16. System.out.println("当前对象为路径?");
  17. System.out.println(file.isDirectory());
  18. //取得文件的大小
  19. System.out.println("当前文件的大小为:");
  20. long length = file.length();
  21. System.out.println(length);
  22. //取得文件的最后修改日期
  23. System.out.println("当前文件的最后修改日期为:");
  24. long date = file.lastModified();
  25. System.out.println(date);
  26. }
  27. }

取得本地文件的相关信息:


  1. /*
  2. * 列出当前目录下所有的文件
  3. * */
  4. public class Test{
  5. public static void main(String[] args) {
  6. String singal = File.separator;
  7. //要操作的文件
  8. File file = new File("C:"+singal+"Users"+singal+"lenovo");
  9. //保证是目录且存在
  10. if(file.exists()&&file.isDirectory()) {
  11. File[] result = file.listFiles();
  12. for (File file2 : result) {
  13. System.out.println(file2);
  14. }
  15. }
  16. }
  17. }

我们不难发现根据File类提供的listFiles可以取得本地文件的信息,但是这样只能取得第一级目录下的相关信息。若我们想要取得所有级的信息,则需要我们自己进行递归操作处理。


  1. /*
  2. * 打印当前目录下所有层级的文件信息
  3. * */
  4. public class Test{
  5. public static void main(String[] args) {
  6. String singal = File.separator;
  7. //要操作的文件
  8. File file = new File("D:"+singal+"Users"+singal+"lenovo");
  9. listAllFileInfor(file);
  10. }
  11. public static void listAllFileInfor(File file) {
  12. if(file.isDirectory()) {
  13. //file对象是目录,列出子目录的信息
  14. File[] files = file.listFiles();
  15. for (File file2 : files) {
  16. //进行递归,
  17. listAllFileInfor(file2);
  18. }
  19. }else {
  20. //当前操作的不是目录
  21. System.out.println(file);
  22. }
  23. }
  24. }

现在所有的代码都在main线程中执行,可以发现只有当listAllFileInfor没有执行完,main的后续操作也无法完成。正是因为这种耗时操作使得主线程出现了阻塞,而导致后续代码无法直接正常执行完毕。若不想让其别阻塞,我们需要重新起一个线程来对其进行操作。


  1. /*
  2. * 解决阻塞main线程,另起线程
  3. * */
  4. public class Test{
  5. public static void main(String[] args) {
  6. new Thread(()->{
  7. String singal = File.separator;
  8. //要操作的文件
  9. File file = new File("G:"+singal+"lenmon");
  10. listAllFileInfor(file);
  11. },"输出线程").start();
  12. System.out.println("main执行完毕");
  13. }
  14. public static void listAllFileInfor(File file) {
  15. if(file.isDirectory()) {
  16. //file对象是目录,列出子目录的信息
  17. File[] files = file.listFiles();
  18. for (File file2 : files) {
  19. //进行递归,
  20. listAllFileInfor(file2);
  21. }
  22. }else {
  23. //当前操作的不是目录
  24. System.out.println(file);
  25. }
  26. }
  27. }


JavaIO——File类的更多相关文章

  1. JavaIO之File类

    Java-IO之File类 Java-IO之File类 1. File类 1.1. File类说明 1.2. 体验 File 类 1.3. 构造一个 File 类实例: 1.4. 路径: 1.4.1. ...

  2. java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

    FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFi ...

  3. java基础知识回顾之javaIO类--File类

    File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读, ...

  4. JavaIO(01)File类详解

    File类 file类中的主要方法和变量   常量: 表示路径的分割符:(windows) 作用:根据java可移植性的特点,编写路径一定要符合本地操作系统要求的分割符: public static ...

  5. JavaIO流——File类

    1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...

  6. Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte

    File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...

  7. 总结JAVA----IO流中的File类

    对于IO流中File类的总结 File类的基本概念 File类只能用于完成对于文件属性(是否存在.可读性.长度)的一些操作,不能用于文件的访问. File类的对象 File类的对象存储的是文件的绝对路 ...

  8. javaIO流(一)--File类的基本使用

    一.File文件操作类 在java语言中提供有对于文件操作系统的支持,这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包中File类是唯一一个与文件本身操作有关的类(创 ...

  9. 吴裕雄--天生自然JAVAIO操作学习笔记:File类

    import java.io.File ; import java.io.IOException ; public class FileDemo01{ public static void main( ...

随机推荐

  1. 记录 mysql 使用时遇到的问题

    1,linux平台上mysqld和mysql的区别. 首先,mysql数据库是标准的c/s架构,yum安装时注意到了,有mysql和mysql-server包 mysql是客户端的工具,mysqld ...

  2. Spring Cloud Alibaba 使用 feign 和 rebion 进行服务消费

    微服务的服务消费,一般是使用 feign 和 rebion 调用服务提供,进行服务的消费,本文将实战使用代码讲解服务的消费. 微服务环境的搭建 创建一个 springboot 项目,springboo ...

  3. C 函数指针语法总结

    C 函数指针语法总结 函数指针 定义 每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针. 注意:函数指针的本质是一个指针变量,且指针指向的函数的入口地址. 语法 返 ...

  4. 理解ASP.NET Core - 日志(Logging)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 快速上手 添加日志提供程序 在文章主机(Host)中,讲到Host.CreateDefault ...

  5. SpringCloud升级之路2020.0.x版-30. FeignClient 实现重试

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 需要重试的场景 微服务系统中,会遇到在线发布,一般的发布更新策略是:启动一个新的,启动成功 ...

  6. idea中的maven模块变成灰色

    问题 在使用idea的过程中,遇到其中一个maven模块变成灰色,如下所示: 解决方法 方法一 造成这个的原因可能是忽略了maven模块,可以尝试如下解决方法:在idea中maven中找到ignore ...

  7. js--数组的 Array.of() 和 Array.from() 方法的使用总结

    前言 JavaScript 中数组的本质是一个对象,它存在的 length 属性值随数组元素的长度变化,但是开发中经常会遇到拥有 length 属性和若干索引属性的对象,被称为类数组对象,类数组对象和 ...

  8. 大爽Python入门教程 2-1 认识容器

    大爽Python入门公开课教案 点击查看教程总目录 1 什么是容器 先思考这样一个场景: 有五个学生,姓名分别为: Alan, Bruce, Carlos, David, Emma. 需要给他们都打一 ...

  9. 我個人喜歡的一些Ubuntu的相關配置

    1.vim vim安裝: sudo apt-get install vim-gtk vim美化:刚安装的VIM,可能界面并不是十分友好,我们可以更改vim的配置文件,按照我们的需求去修改它.在命令行下 ...

  10. Mplus数据分析:随机截距交叉之后的做法和如何加协变量,写给粉丝

    记得之前有写过如何用R做随机截距交叉滞后,有些粉丝完全是R小白,还是希望我用mplus做,今天就给大家写写如何用mplus做随机截距交叉滞后. 做之前我们需要知道一些Mplus的默认的设定: obse ...